Иногда случается так, что каталог товаров уже заполнен, но у каждого товара выбрана только одна категория нижнего уровня. А хотелось бы, чтобы товар отображался во всех категориях, которые являются родителем. Это можно сделать с помощью одного запроса к mysql

Чтобы внести ясность - приведу пример.

У нас есть товар "Пылесос ПС-01".

Есть иерархия категорий:

  • Бытовая техника
    • Техника для дома
      • Пылесосы

Сейчас наш товар отображается только в категории "Пылесосы". А нам надо, чтобы он отображался в категориях "Пылесосы", "Техника для дома" и "Бытовая техника".

И таких товаров у нас очень много и много различных категорий со своей иерархией.

Руками добавить 10 000 товаров во все родительские категории - дело для выносливых, усидчивых, старательных.

Мы же выполним mySQL запрос:

Не забудьте поменять префикс oc_ на тот, который используется в вашей базе.

Готово.

!!!Не забывайте делать бэкап перед прямыми запросами в базу

Ответы

Ваш e-mail не будет опубликован. Обязательные поля помечены *

+

  1. Alex

    Подскажите, как организовать сортировку товаров в категории верхнего уровня, чтобы в ней сначала отображались товары из первой категории, затем второй и тп.

    1. Администратор Автор сообщения

      Нужно править файл "\catalog\model\catalog\product.php"
      Функцию getProducts()

      Перед строкой (62):
      if (!empty($data['filter_category_id'])) {
      Добавить строку:
      $sql .= ", (SELECT min(level) FROM oc_category_path WHERE path_id = p2c.category_id) as level"

      Строку (177):
      $sql .= " ORDER BY p.sort_order";
      Привести к следующему виду:
      $sql .= " ORDER BY level, p.sort_order";