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

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


Перейти к решению Решено mishanya,

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

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

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

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

 

 

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

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

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

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

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

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

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

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

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

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

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

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

 

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

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты
  • Решение

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

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$

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

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

Работает!

 

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

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, это количество ваших товаров.

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

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

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?

Изменено пользователем palehin
Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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;
	}
}
Ссылка на сообщение
Поделиться на другие сайты

 

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

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;
	}
}

 

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

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

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

 

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

 

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

Спасибо

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

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

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

Спасибо

 

тут виджет 

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

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

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

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

 

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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