В интернет магазинах на движке opencart есть такое хорошее свойство как сопутствующие товары, которое при добавлении связанного товара на текущий товар автоматически добавляется и на выбранный, К примеру если мы добавили к мойке сопутствующий товар смеситель то к товару смеситель будет автоматически добавлена мойка и.т.д... Но иногда данная функция не совсем уместна так как в большинстве к товарам мы добавляем аксессуары но ни как не наоборот. Так что в данном уроке я хотел бы поговорить о том как это исправить .
Все изменения мы будем проводить в едином файле а именно здесь /admin/model/catalog/product.php
Так что находим и открываем вышеуказанный файл и находим в нем следующий код:
1 2 3 4 5 6 7 |
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 . "'"); } } |
В данном коде мы удаляем или комментируем несколько строк чтоб получилось так как в примере ниже:
1 2 3 4 5 6 7 |
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 . "'"); } } |
Далее нам нужно найти код:
1 2 3 4 5 6 7 8 9 10 11 |
$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 . "'"); } } |
И в нем так же удаляем или комментируем чтоб получилось как в коде ниже:
1 2 3 4 5 6 7 8 9 10 11 |
$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 . "'"); } } |
Ну последнее ето находим и комментируем строку ниже:
1 |
$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'"); |
Ну в принципе все сделано теперь товар будет добавляться именно как сопутствующие товары, и обратная связь работать не будет, Но есть маленький не достаток, все добавленные товары ранее нужно будет добавить по новой...
4 комментария
На opencart 1.5.6 почему то не получается.
Странно, должно работать на указанной версии, хотя без осмотра пациента и точного диагноза что то сказать сложно!
Дело было не в бабине ).
Спасибо всё заработало.
То что нужно. Стандартная функция модуля не совсем держит логику.
Работает, автору +