OpenCart: автогенерация сопутствующих товаров
Все сопутствующие товары, по умолчанию, добавляются вручную. Когда на сайте тысячи товаров, это становится проблемой.
Что делать
- Открываем сайт/catalog/model/catalog/product.php
- Находим код (~392 строка):
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
- Заменяем его на:
$query = $this->db->query("SELECT *, (p.product_id) AS related_id FROM
" . DB_PREFIX . "product_to_category p2c
LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)
LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)
WHERE
p2c.category_id IN (SELECT p2c2.category_id FROM " . DB_PREFIX . "product_to_category p2c2 WHERE p2c2.product_id = " . (int) $product_id . ")
AND p.product_id <> " . (int) $product_id . "
AND p.status = '1'
AND p.stock_status_id != '5'
AND p.date_available <= NOW()
AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'
ORDER BY RAND() ASC
LIMIT 0,8");
- Сохраняем, обновляем кэш.
- Готово.
Сопутствующие товары начнут генерироваться случайным образом — из подкатегорий родительской категории. И только те, которые есть в наличии.