Jump to content

Как вывести связанные товары в корзине?


Go to solution Solved by mishanya,

Recommended Posts

Как вывести связанные товары в корзине?

Хотябы по первому добавленному в корзину товару.

Уже голову сломал. Ничего не получается.

 

 

Link to post
Share on other sites

если только для первого то не так сложно. если брать по несколько из всех добавленных уже сложнее. 

сделайте выборку для первогого товара рекомендуемых как это сделано в ProductView.php. выбирать нужно в api/Cart.php в ф-и get_cart

Link to post
Share on other sites

Расскажите подробнее?

В  ProductView.php связанные товары берутся исходя из url открытого в данный момент товара. Я пробовал переделать эту часть кода для cartView.php но ничего не вышло.

Как все это интегрировать в api/cart.php ?

Link to post
Share on other sites

Расскажите подробнее?

В  ProductView.php связанные товары берутся исходя из url открытого в данный момент товара. Я пробовал переделать эту часть кода для cartView.php но ничего не вышло.

Как все это интегрировать в api/cart.php ?

нет они берутся там исходя из айди товара, который в свою очередь да берется из юрл.

 

но в корзине у вас уже есть айди товара в переменной $purchase->product->id

Edited by mishanya
Link to post
Share on other sites
  • Solution

В общем чтобы получить все рекомендуемые товары всех товаров из корзины ПОСЛЕ

foreach($items as $variant_id=>$item)
{	
	$purchase = null;
	if(!empty($products[$item->variant->product_id]))
	{
		$purchase = new stdClass();
		$purchase->product = $products[$item->variant->product_id];						
		$purchase->variant = $item->variant;
		$purchase->amount = $item->amount;

		$cart->purchases[] = $purchase;
		$cart->total_price += $item->variant->price*$item->amount;
		$cart->total_products += $item->amount;
	}
}

добавить надо

$cart->related_products = array();

$related_ids = array();
$related_products = array();
foreach($this->products->get_related_products($products_ids) as $p)
{
	$related_ids[] = $p->related_id;
	$related_products[$p->related_id] = null;
}
if(!empty($related_ids))
{
	foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p)
		$related_products[$p->id] = $p;
	
	$related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products)));
	foreach($related_products_images as $related_product_image)
		if(isset($related_products[$related_product_image->product_id]))
			$related_products[$related_product_image->product_id]->images[] = $related_product_image;
	$related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'in_stock'=>1));
	foreach($related_products_variants as $related_product_variant)
	{
		if(isset($related_products[$related_product_variant->product_id]))
		{
			$related_products[$related_product_variant->product_id]->variants[] = $related_product_variant;
		}
	}
	foreach($related_products as $id=>$r)
	{
		if(is_object($r))
		{
			$r->image = &$r->images[0];
			$r->variant = &$r->variants[0];

			$cart->related_products[] = $r;
		}
		else
		{
			unset($related_products[$id]);
		}
	}
}

 

будет доступен массив $cart->related_products

хотелось бы знать что тут стоит 40$

Edited by mishanya
Link to post
Share on other sites

Мишаня, Спасибо огромное добрый человек!

Работает!

 

Пожалуйста, так же можно ограничить выборку этих товаров до какого-то количества заменив

foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p)

на

foreach($this->products->get_products(array('id'=>$related_ids, 'limit'=>6, 'in_stock'=>1, 'visible'=>1)) as $p)

где 'limit'=>6, это количество ваших товаров.

Link to post
Share on other sites

В общем чтобы получить все рекомендуемые товары всех товаров из корзины ПОСЛЕ

foreach($items as $variant_id=>$item)
{	
	$purchase = null;
	if(!empty($products[$item->variant->product_id]))
	{
		$purchase = new stdClass();
		$purchase->product = $products[$item->variant->product_id];						
		$purchase->variant = $item->variant;
		$purchase->amount = $item->amount;

		$cart->purchases[] = $purchase;
		$cart->total_price += $item->variant->price*$item->amount;
		$cart->total_products += $item->amount;
	}
}

добавить надо

$cart->related_products = array();

$related_ids = array();
$related_products = array();
foreach($this->products->get_related_products($products_ids) as $p)
{
	$related_ids[] = $p->related_id;
	$related_products[$p->related_id] = null;
}
if(!empty($related_ids))
{
	foreach($this->products->get_products(array('id'=>$related_ids, 'in_stock'=>1, 'visible'=>1)) as $p)
		$related_products[$p->id] = $p;
	
	$related_products_images = $this->products->get_images(array('product_id'=>array_keys($related_products)));
	foreach($related_products_images as $related_product_image)
		if(isset($related_products[$related_product_image->product_id]))
			$related_products[$related_product_image->product_id]->images[] = $related_product_image;
	$related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($related_products), 'in_stock'=>1));
	foreach($related_products_variants as $related_product_variant)
	{
		if(isset($related_products[$related_product_variant->product_id]))
		{
			$related_products[$related_product_variant->product_id]->variants[] = $related_product_variant;
		}
	}
	foreach($related_products as $id=>$r)
	{
		if(is_object($r))
		{
			$r->image = &$r->images[0];
			$r->variant = &$r->variants[0];

			$cart->related_products[] = $r;
		}
		else
		{
			unset($related_products[$id]);
		}
	}
}

 

будет доступен массив $cart->related_products

хотелось бы знать что тут стоит 40$

 

Когда добавляю ПОСЛЕ, то в корзине появляется два одинаковых товара при добавлении одного.

+ Как убрать дубликаты, допустим если у нескольких товаров одинаковые сопутствующие? array_unique?

Edited by palehin
Link to post
Share on other sites

Когда добавляю ПОСЛЕ, то в корзине появляется два одинаковых товара при добавлении одного

 

может вы продублировали это еще раз?

foreach($items as $variant_id=>$item)
{	
	$purchase = null;
	if(!empty($products[$item->variant->product_id]))
	{
		$purchase = new stdClass();
		$purchase->product = $products[$item->variant->product_id];						
		$purchase->variant = $item->variant;
		$purchase->amount = $item->amount;

		$cart->purchases[] = $purchase;
		$cart->total_price += $item->variant->price*$item->amount;
		$cart->total_products += $item->amount;
	}
}
Link to post
Share on other sites

 

может вы продублировали это еще раз?

foreach($items as $variant_id=>$item)
{	
	$purchase = null;
	if(!empty($products[$item->variant->product_id]))
	{
		$purchase = new stdClass();
		$purchase->product = $products[$item->variant->product_id];						
		$purchase->variant = $item->variant;
		$purchase->amount = $item->amount;

		$cart->purchases[] = $purchase;
		$cart->total_price += $item->variant->price*$item->amount;
		$cart->total_products += $item->amount;
	}
}

 

Да, там продублировалось немного. Недоглядел ваш измененный ответ.

Link to post
Share on other sites

хотелось бы знать что тут стоит 40$

 

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

 

Если Вы этот код писали полностью самостоятельно от и до  по спецзаказу и при этом отлаживали каждую строку, то, он, может, и больше стоит.

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

 

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

Link to post
Share on other sites
  • 1 month later...

1. Ошибка мелкая - выводятся товары, связанные с теми, которые есть в корзине. При этом запросто может оказаться, что в списке связанных могут быть и товары, которые УЖЕ находятся в корзине. Видимо, это неправильно...

2. Ошибка очень серьезная - доработка создает бесполезную излишнюю нагрузку на базу. Это понятно, или надо разжевывать? Если непонятно, то информация к размышлению: посмотреть, как автором Simpla стандартно сделан (закомментированный) вывод связанных в корзину в предыдущих версиях.

Link to post
Share on other sites
  • 2 months later...

Скажите пожалуйста 

Допустим я указал связанные товары только к 1 товару, а в корзине хочу чтобы они были ко всем товарам постоянно.

Тоесть не каждый товар имеет свои связанные, а все товары имеют общие связанные

Link to post
Share on other sites

Скажите пожалуйста 

Допустим я указал связанные товары только к 1 товару, а в корзине хочу чтобы они были ко всем товарам постоянно.

Тоесть не каждый товар имеет свои связанные, а все товары имеют общие связанные

Тогда легче просто выводить определенный товары в корзине всегда.

Link to post
Share on other sites

Скажите пожалуйста 

Допустим я указал связанные товары только к 1 товару, а в корзине хочу чтобы они были ко всем товарам постоянно.

Тоесть не каждый товар имеет свои связанные, а все товары имеют общие связанные

 

используйте универсальный виджет товаров и выводите туда постоянно ваших 10товаров

Link to post
Share on other sites

тоесть выводить через виджет товары по айди? или создавать новый тип по типу рекомендуемые и выводить их.

Если можно кусок кода с добавлением по айди товаров.

Спасибо

Link to post
Share on other sites

тоесть выводить через виджет товары по айди? или создавать новый тип по типу рекомендуемые и выводить их.

Если можно кусок кода с добавлением по айди товаров.

Спасибо

 

тут виджет 

Link to post
Share on other sites
  • 3 weeks later...

А у меня не появились связанные товары в корзине. В шаблоне cart.tpl добавил. Но не работает. Может я что-то еще не сделал

 

возможно. чтобы это понять нужно знать что вы делали.

Link to post
Share on other sites

:)  Я в api/Cart.php внес рекомендуемые изменения. Затем я скопировал весь html-код связанных товаров из файла product.tpl и вставил в файл cart.tpl. 

 

заметьте, я писал что будет доступен массив $cart->related_products а не $related_products как в товаре

Link to post
Share on other sites
  • 1 year later...

Здравствуйте. Доработка прекрасно работает, но скажите, а как обновить список товаров в корзине. Ведь товар добавляется, в информере количество возрастает, но товар в списке корзины появляется только после перезагрузки страницы. Подскажите, пожалуйста, как решить данный вопрос.

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...