Сопутствующие товары opencart



У товаров есть замечательное свойство- связанные товары. Opencart одновременно проставляет связи и на текущий товар и на выбранный товар. Например: если мы к телефону добавляем связанный продукт- чехол, то и к чехлу автоматически добавляется связанный продукт телефон. В таком виде эта опция малоприменима, т.к. обычно к выбранному товару подбираются аксессуарны, а не наоборот.

Сейчас мы это исправим. Открываем: /admin/model/catalog/product.php и находим:

if (isset($data['product_related'])) {
  foreach ($data['product_related'] as $related_id) {
    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . 	$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
    $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
    }
  }

Комментируем лишнее и получаем:

if (isset($data['product_related'])) {
  foreach ($data['product_related'] as $related_id) {
    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . 	$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
    //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
    //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
    }
  }

Далее находим:

$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");

if (isset($data['product_related'])) {
  foreach ($data['product_related'] as $related_id) {
    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
    $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
    $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
    }
  }

Опять комментируем лишнее:

$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'");
//$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");

if (isset($data['product_related'])) {
  foreach ($data['product_related'] as $related_id) {
    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
    $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
    //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
    //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
    }
  }

Комментируем строчку:

$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");

Всё, теперь этот модуль работает именно как сопутствующие товары. Opencart теперь не добавляет обратную связь в связанный товар. Но теперь что бы правильно работали сопутствующие товары, opencart придётся перенастроить. Зайдите в каждый ранее связанный товар и пере привяжите его по новой.


Сообщество: AWS

Комментариев(9)


ID: #200   Создан:
Автор: Алек

Здравствуйте! Очень интересно было бы увидеть как вывести 2 товара, которые следуют перед текущим, и 2 товара после текущего. Спасибо Вам!

ID: #201   Создан:
Автор: ololoev
>>200

Задача не понятна. "2 товара, которые следуют перед текущим", следуют где? В списке товаров в админке? И вывести куда? под/вместо модуля "связанные товары"?

ID: #202   Создан:
Автор: Александр

Да, которые следуют в текущем каталоге перед текущим товаром и после. Под место связанных товаров, или после них.

ID: #203   Создан:
Автор: ololoev

К сожалению в таком виде простого рецепта не существует. Нужно переделывать как контроллер так и шаблон.

ID: #204   Создан:
Автор: Андрей

Инструкция написана для OpenCart 2.x? А то вдруг не подойдет, мне решение подходит ваше.

ID: #205   Создан:
Автор: ololoev

Инструкция писалась именно под 2 версию, но под первую версию различия минимальны.

ID: #206   Создан:
Автор: Андрей

Спасибо, все работает, стабильно и правильно.

ID: #207   Создан:
Автор: Евгений

Здравствуйте! Можете подсказать, как добавить кнопки "купить" к сопутствующим товарам?

ID: #208   Создан:
Автор: Владимир

Здравствуйте, попробовал на Окстор 2.1* что то не получается убрать взаимосвязь. Не подскажете в чем причина?

Всего: 9 комментариев на 1 страницах

Ваш комментарий будет анонимным. Чтобы оставить не анонимный комментарий, пожалуйста, зарегистрируйтесь



Сообщества