Всё о web

Для чайников и не только


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

Февраль 3, 2015

У товаров есть замечательное свойство- связанные товары. 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 придётся перенастроить. Зайдите в каждый ранее связанный товар и пере привяжите его по новой.



Комментарии

9 комментариев | “Сопутствующие товары opencart

  1. Аватар Алек:

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

    1. Илья Илья:

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

  2. Аватар Александр:

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

  3. Илья Илья:

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

  4. Аватар Андрей:

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

  5. Илья Илья:

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

  6. Аватар Андрей:

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

  7. Аватар Евгений:

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

  8. Аватар Владимир:

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

Оставить комментарий:

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