Rose debug info
---------------

OpenCart: автогенерация сопутствующих товаров

Все сопутствующие товары, по умолчанию, добавляются вручную. Когда на сайте тысячи товаров, это становится проблемой.

Что делать

  1. Открываем сайт/catalog/model/catalog/product.php
  1. Находим код (~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') . "'");
  1. Заменяем его на:
$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");
  1. Сохраняем, обновляем кэш.
  1. Готово.

Сопутствующие товары начнут генерироваться случайным образом — из подкатегорий родительской категории. И только те, которые есть в наличии.

Поделиться
Отправить
 1463   2020   OpenCart 3   работа