Jump to content

Recommended Posts

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

 

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

 

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

 

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

 

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

 

 

Link to post
Share on other sites

Самый просто способ - дублировать обратную связь для связанных товаров. В файле 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. Предчувствуя критику некоторый персон - да можно конечно растянуть задачу на несколько человекочасов и кучу денег, но обратные связи по ключам работают быстро и эффективно...

Link to post
Share on other sites

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);
 
Link to post
Share on other sites

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

Link to post
Share on other sites
  • 6 years later...

Самый просто способ - дублировать обратную связь для связанных товаров. В файле 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% сделано как вы написали

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...