Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Изменение функционала Рекомендованные товары / Похожие товары


Recommended Posts

Добрый день.

 

Вопрос, связанный с отображением рекомендованных товаров. На сайте необходимо организовать следующую структуру: есть товарные позиции (оборудование), для которого можно использовать дополнительные аксессуары, т.е. есть страница товара, а внизу, как рекомендованные идут аксессуары. Вот страница https://telergon-rus.ru/vykljuchateli-nagruzki/vykljuchatel-nagruzki-s5-40a-3p.

 

Этот функционал в Opencart организован таким образом, что при добавлении рекомендованного аксессуара (на примере указанного выше сайта) у оборудования, автоматически добавляется как рекомендованное, это оборудование у аксессуара, а нужно чтобы не было перекрёстных рекомендаций.

 

Т.е. например на странице https://telergon-rus.ru/vykljuchateli-nagruzki/vykljuchatel-nagruzki-s5-40a-3p добавлен рекомендуемый - Рукоятка прямого монтажа DS-SI01, а на странице рукоятки https://telergon-rus.ru/aksessuary/rukojatka-prjamogo-montazha/rukojatka-prjamogo-montazha-ds-si01 не должен отображаться как рекомендуемый - Выключатель нагрузки S5 40A 3P. И так же с остальными аксессуарами, любые аксессуары должны отображаться у оборудования, а оборудование у аксессуаров не должно отображаться.

Надіслати
Поділитися на інших сайтах


/admin/model/catalog/product.php

 

вот этот участок кода, нужно убрать второй INSERT, ну и 2й DELETE тоже можно.

 

		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 . "'");
			}
		}

 

Надіслати
Поділитися на інших сайтах

28 минут назад, Vetroff сказал:

/admin/model/catalog/product.php

 

вот этот участок кода, нужно убрать второй INSERT, ну и 2й DELETE тоже можно.

 


		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 . "'");
			}
		}

 

 

такой участок в этом файле есть в 2-х местах, у меня 107 строка и 281 строка

Надіслати
Поділитися на інших сайтах


6 минут назад, electromatica2 сказал:

такой участок в этом файле есть в 2-х местах, у меня 107 строка и 281 строка

 

и там и там, первая функция добавления, вторая редактирования.

Надіслати
Поділитися на інших сайтах

а если я хочу через модификатор сделать, чтоб при обновлении opencart не слетало изменение, вот так правильно будет?

  <file path="admin/model/catalog/product.php">
    <operation>
      <search><![CDATA[
				$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 . "'");
	  ]]></search>
      <add position="replace"><![CDATA[
		]]></add>
    </operation>
  </file>

и не надо ли здесь ещё какой-нибудь атрибут использовать?

Змінено користувачем electromatica2
Надіслати
Поділитися на інших сайтах


Отлично, вот так сработало:

<file path="admin/model/catalog/product.php">
  <operation>
  	<search><![CDATA[
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
	]]></search>
	<add position="replace" offset="1"><![CDATA[
	]]></add>
  </operation>
</file>

 

Надіслати
Поділитися на інших сайтах


5 часов назад, Vetroff сказал:

вот этот участок кода, нужно убрать второй INSERT, ну и 2й DELETE тоже можно

 

2 часа назад, electromatica2 сказал:

Вроде работает))

 

до тех пор, пока не отредактируете/сохраните подчиненный товар

 

Надіслати
Поділитися на інших сайтах

1 час назад, AlexDW сказал:

до тех пор, пока не отредактируете/сохраните подчиненный товар

 

оу, действительно.

Надіслати
Поділитися на інших сайтах

Вот так заработало правильно, не удаляется подчинённый, когда его редактируешь/сохраняешь

<file path="admin/model/catalog/product.php">
	<operation>
		<search>
		<![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");]]>
		</search>
		<add position="replace" offset="1">
		<![CDATA[]]>
		</add>
	</operation>
	<operation>
		<search>
		<![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");]]>
		</search>
		<add position="replace">
		<![CDATA[/*Delete double relating $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");*/]]>
		</add>
	</operation>
</file>

Да, и тут в коде 2 варианта замены кода, в первом случае (первый search) удаляет полностью 2 строки в 2-х местах, во втором случае оригинальная строка заменяется на закомментированную строку, так же данный код встречается и заменяется в 2-х местах.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.