Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Добрый день, подскажите пожалуйста проблема в следующем.

 

У меня в категории находиться около 30 товаров.

 

Я хочу вывести блок похожих (связанных) товаров и мне приходиться в каждом товаре вбивать около 10-ти штук которые относятся к нему,  и тоже самое делать в тех 10-ти.  

 

Вопрос, как автоматизировать данную процедуру, например вбив связь в одном только товаре, а в других оно подтягивало автоматически.

 

Заранее спасибо за ответы.

 

 

Ссылка на сообщение
Поделиться на другие сайты

Самый просто способ - дублировать обратную связь для связанных товаров. В файле api/Products.php заменить метод add_related_product на

	public function add_related_product($product_id, $related_id, $position=0)
	{
        $query = $this->db->placehold("INSERT IGNORE INTO __related_products SET related_id=?, product_id=?, position=?", $product_id, $related_id, $position);
        $this->db->query($query);
		$query = $this->db->placehold("INSERT IGNORE INTO __related_products SET product_id=?, related_id=?, position=?", $product_id, $related_id, $position);
		$this->db->query($query);
		return $related_id;
	}

Т.е. мы создаем обратную связь. Ну и естественно аналогичным образом модернизируем удаление - метод delete_related_product

	public function delete_related_product($product_id, $related_id)
	{
        $query = $this->db->placehold("DELETE FROM __related_products WHERE related_id=? AND product_id=? LIMIT 1", intval($product_id), intval($related_id));
        $this->db->query($query);
		$query = $this->db->placehold("DELETE FROM __related_products WHERE product_id=? AND related_id=? LIMIT 1", intval($product_id), intval($related_id));
		$this->db->query($query);
	}

Теперь при установке связи в 1 товаре - он будет появляться и в другом, и аналогично в обратном порядке.

P.S. Предчувствуя критику некоторый персон - да можно конечно растянуть задачу на несколько человекочасов и кучу денег, но обратные связи по ключам работают быстро и эффективно...

Ссылка на сообщение
Поделиться на другие сайты

mart, а почему бы просто в отображении не сделать поиск по product_id и related_id что бы не дублировать записи в БД

 

То есть в методе get_related_products

 

 



$product_id_filter = $this->db->placehold('AND product_id in(?@)', (array)$product_id);
 

 

заменить  на

 

 

$product_id_filter = $this->db->placehold('AND (product_id in(?@) OR related_id in(?@))', (array)$product_id, (array)$product_id);
 
Ссылка на сообщение
Поделиться на другие сайты

Я понимаю Ваше решение, rostislav505, тоже была такая первая такая мысль, но смысл в том, что при выводе в товаре связанных будет выдавать в том числе и тот, из которого вызывают.

Ссылка на сообщение
Поделиться на другие сайты
  • 6 лет спустя...

Самый просто способ - дублировать обратную связь для связанных товаров. В файле api/Products.php заменить метод add_related_product на

	public function add_related_product($product_id, $related_id, $position=0)
	{
        $query = $this->db->placehold("INSERT IGNORE INTO __related_products SET related_id=?, product_id=?, position=?", $product_id, $related_id, $position);
        $this->db->query($query);
		$query = $this->db->placehold("INSERT IGNORE INTO __related_products SET product_id=?, related_id=?, position=?", $product_id, $related_id, $position);
		$this->db->query($query);
		return $related_id;
	}

Т.е. мы создаем обратную связь. Ну и естественно аналогичным образом модернизируем удаление - метод delete_related_product

	public function delete_related_product($product_id, $related_id)
	{
        $query = $this->db->placehold("DELETE FROM __related_products WHERE related_id=? AND product_id=? LIMIT 1", intval($product_id), intval($related_id));
        $this->db->query($query);
		$query = $this->db->placehold("DELETE FROM __related_products WHERE product_id=? AND related_id=? LIMIT 1", intval($product_id), intval($related_id));
		$this->db->query($query);
	}

Теперь при установке связи в 1 товаре - он будет появляться и в другом, и аналогично в обратном порядке.

P.S. Предчувствуя критику некоторый персон - да можно конечно растянуть задачу на несколько человекочасов и кучу денег, но обратные связи по ключам работают быстро и эффективно...

подскажите почему может не работать? 100% сделано как вы написали

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...