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

03.02.2015 04:22

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



Быстрый заказ opencart 2

Стандартный opencart имеет очень большую форму заказа на все случаи жизни. В Российских реалиях нужен простой заказ - это контактные данные: имя, телефон, почта и адрес, регион фирма и т.д. не нужны. В большинстве случаев дальше оператор магазина сам перезванивает клиенту и уточняет детали заказа.


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

Алек - 14.10.2015 18:57:32
- 0    + 0
Здравствуйте! Очень интересно было бы увидеть как вывести 2 товара, которые следуют перед текущим, и 2 товара после текущего. Спасибо Вам!
Илья - 15.10.2015 12:24:00
- 0    + 0
Задача не понятна. "2 товара, которые следуют перед текущим", следуют где? В списке товаров в админке? И вывести куда? под/вместо модуля "связанные товары"?
Александр - 17.10.2015 11:29:03
- 0    + 0
Да, которые следуют в текущем каталоге перед текущим товаром и после. Под место связанных товаров, или после них.
Илья - 19.10.2015 02:34:14
- 0    + 0
К сожалению в таком виде простого рецепта не существует. Нужно переделывать как контроллер так и шаблон.
Андрей - 24.01.2016 12:46:39
- 0    + 0
Инструкция написана для OpenCart 2.x? А то вдруг не подойдет, мне решение подходит ваше.
Илья - 24.01.2016 12:48:47
- 0    + 0
Инструкция писалась именно под 2 версию, но под первую версию различия минимальны.
Андрей - 24.01.2016 15:31:05
- 0    + 0
Спасибо, все работает, стабильно и правильно.
Евгений - 09.03.2016 10:34:24
- 0    + 0
Здравствуйте!
Можете подсказать, как добавить кнопки "купить" к сопутствующим товарам?
Владимир - 11.07.2016 19:31:10
- 0    + 0
Здравствуйте, попробовал на Окстор 2.1* что то не получается убрать взаимосвязь. Не подскажете в чем причина?