В интернет магазинах на движке 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 почему то не получается.
Странно, должно работать на указанной версии, хотя без осмотра пациента и точного диагноза что то сказать сложно!
Дело было не в бабине ).
Спасибо всё заработало.
То что нужно. Стандартная функция модуля не совсем держит логику.
Работает, автору +