if (isset($data['filter_tag']) && $data['filter_tag']) {
$sql .= " AND p.product_id IN (SELECT pt.product_id FROM " . DB_PREFIX . "product_tag pt WHERE pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LOWER(pt.tag) LIKE '%" . $this->db->escape(strtolower($data['filter_tag'])) . "%')";
}
if (isset($data['filter_category_id']) && $data['filter_category_id']) {
if (isset($data['filter_sub_category']) && $data['filter_sub_category']) {
$implode_data = array();
$this->load->model('catalog/category');
$categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']);
foreach ($categories as $category_id) {
$implode_data[] = "p2c.category_id = '" . (int)$category_id . "'";
}
$sql .= " AND p.product_id IN (SELECT p2c.product_id FROM " . DB_PREFIX . "product_to_category p2c WHERE " . implode(' OR ', $implode_data) . ")";
} else {
$sql .= " AND p.product_id IN (SELECT p2c.product_id FROM " . DB_PREFIX . "product_to_category p2c WHERE p2c.category_id = '" . (int)$data['filter_category_id'] . "')";
}
}
if (isset($data['filter_manufacturer_id'])) {
$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
}
Это из модели товара, конкретно из метода getProducts, это стандартный фильтр в котором есть - Теги, Категория, Производитель и т.д. Выбор группы товара попадает под условия Категория = category_id и Производитель = filter_manufacturer_id, собственно внутри это будет именно так и ни как по другому, стандартный фильтр есть и он работает, причём превосходно.Всё что требуется это добавить в существующую модель категорий в виде второго уровня категорий КатегорияПроизводитель, решается это формированием подкатегории в виде КатегорияПроизводитель на основании фильтрации по товару (не путать с фильтрацией самого товара).
В работе для Товарная группа -> Фирма -> Товар:
1) Выбираете категории (все, ибо они у вас все родительские для КатегорияПроизводитель, других нет)
2) Выбираете для каждой выбранной категории Производителей на основании наличия товара в КатегорияТоварнаяГруппа и КатегорияПроизводитель, то есть если есть товар в Категории и Производителе зн КатегорияТоварнаяГруппа -> КатегорияПроизводитель присутствует. Механизм выборки сего списка основная головная боль.
3) Имеете КатегорияТоварнаяГруппа_ID -> КатегорияПроизводитель_ID = список товара по стандартному фильтру.
4) ЧПУ - возможно придётся допиливать чтоб для клиента выглядело именно как категория
обе схемы
работают одинаково в обе стороны, смена схемы по аналогии с валютой например, можно создавать по два метода на каждую схему, можно один, тут как программист решит.Модель категорий пилить неизбежно, до кучи все контроллеры где светятся списки товаров (если хотите причёсанные ссылки)...
ЗЫ забыл упомянуть что всё это проделывается с Родительсими категориями и встроенным функционалом Производители, тоесть вложенность она визуальная, на деле есть категории и есть производители завязанные через товар... ИХМО изменение в схеме БД, хотябы изменение вышеобозначенной таблицы, упростило бы всё в разы...