Исключить вывод товаров из некоторых подкатегорий в Opencart 3

Цена договорная
14 мая 2024, 10:55 • 4 отклика • 34 просмотра
Здравствуйте. Сделал вывод всех товаров в подкатегориях в родительской, но нужно исключить товары из некоторых категорий. (В списке генераторов не должно быть АВР и альтернаторов).

Ниже мои правки, но возникает ошибка.

Насколько понимаю, нужно добавить условия: если категория — не генераторы и у товара нет исключённых категорий.

В модели товара в функции getProducts() скопировал, добавил и переделал:

} else if (!empty($data['filter_category_id'] AND $data['filter_category_id'] == 61)) {

if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id) WHERE p2c.category_id NOT IN ('909', '53')";
} else {
$sql .= " FROM " . DB_PREFIX . "product_to_category p2c";
}

if (!empty($data['filter_filter'])) {
$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";
} else {
$sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
}

Комментарий: добавил: WHERE p2c.category_id NOT IN ('909', '53') (909 и 53 — id исключённых категорий) и в начале — проверку на id открытой категории (61).

Но возникает ошибка, только у этой категории:
Fatal error: Uncaught Exception: Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN oc_product p ON (p2c.product_id = p.product_id) LEFT JOIN oc_product_d' at line 1<br />Error No: 1064<br />SELECT p.product_id, (SELECT AVG(rating) AS total FROM oc_review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM oc_product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '1' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM oc_product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '1' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMI in /home/c/ca34391/storage1/modification/system/library/db/mysqli.php on line 43
Могу заплатить за консультацию или выслать файл с кодом. Желательно, без доступа к сайту (нужно согласовывать с владельцем). Но, если нужно, то спрошу.


Отзывы
Задача оказалась сложнее. Дмитрий нашёл решение за короткий срок и доработал и протестировал функционал на своём сервере, без необходимости предоставлять к нашему.
Спасибо за помощь. Был рад сотрудничеству.
7 месяцев назад
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Фрилансер
 
7 месяцев назад