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

Связанные товары в каталоге products.tpl


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

Добрый день форумчани, и со всеми праздниками!

Хочу вывести связанные товары в каталоге к каждому товару (где есть связанные товары у товара).

В ProductsView.php вставляю:


$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];
		}
		else
		{
			unset($related_products[$id]);
		}
	}
}

ну и в шаблоне products.tpl вывожу

{if $related_products}
     тут отображение связанных товаров
{/if}

Но почему не отображаются?(

Ссылка на сообщение
Поделиться на другие сайты
20 минут назад, phukortsin сказал:

Возможно, потому, что данные не переданы в шаблон... 

пробовал методом

$product->related_products = array();

чтобы вывести через $product->related_products и тоже не работает(

Ссылка на сообщение
Поделиться на другие сайты
20 минут назад, phukortsin сказал:

Пробовать лишь бы как методом тыка - не лучшая стратегия...

вывести где угодно "методом тыка" получается, а вот в каталоге нет....аналогичный метод а ТЫК не работает...

 

 

 

Ссылка на сообщение
Поделиться на другие сайты
1 час назад, get31 сказал:

вывести где угодно "методом тыка" получается, а вот в каталоге нет....аналогичный метод а ТЫК не работает...

 

 

 

Очень сомневаюсь, что Вы сможете это сделать "где угодно".

И дополнительно возникает вопрос о смысле этого "где угодно". У Вас получается вывести абсолютно ВО ВСЕХ местах, кроме каталога? Все у Вас получается на главной, на странице корзины, на странице заказа, на инфостраницах, в блоге, в личном кабинете, в письмах? Может, сможете описать полностью свое рабочее решение хоть в одном из перечисленных случаев?

Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, phukortsin сказал:

Может, сможете описать полностью свое рабочее решение хоть в одном из перечисленных случаев?

Пруфы нужны? Та не вопрос. В OrderView после foreach($purchases as &$purchase){ }

добавляем:


		$order->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];

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

В шаблоне выводим: {if $order->related_products} тут связанные товары {/if}

 

17 минут назад, phukortsin сказал:

Очень сомневаюсь

Еще есть сомнения?

 

В 07.01.2024 в 15:41, phukortsin сказал:

Возможно

....одни сомнения в ответах

Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, phukortsin сказал:

Видно четко, что во втором коде данные в шаблон передаются. А в первом НЕ передаются.

Я ранее уже писал что:

В 07.01.2024 в 16:03, get31 сказал:

через $product->related_products и тоже не работает

 

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

Оно и не должно работать. Если считаете, что должно, то пишите ТОЧНЫЕ объяснения, с какой стати это должно работать. Причина все та же - нужные данные в шаблон НЕ передаются.

Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, phukortsin сказал:

Оно и не должно работать. Если считаете, что должно, то пишите ТОЧНЫЕ объяснения, с какой стати это должно работать. Причина все та же - нужные данные в шаблон НЕ передаются.

Интересная логика получается, по коду для OrderView данные передаются, а для ProductsView не передаются, а код идентичный)))

		$product->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];

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

 

Ссылка на сообщение
Поделиться на другие сайты
$product->related_products = array();

Как бы вот это хрень полная))

В OrderView $order ОДИН , а в ProductsView $product - его НЕТ, он существует только внутри $products

Если не имеете понятия, что делаете и зачем - лучше не лезть

Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Kosjak76 сказал:

$product->related_products = array();

Как бы вот это хрень полная))

В OrderView $order ОДИН , а в ProductsView $product - его НЕТ, он существует только внутри $products

Если не имеете понятия, что делаете и зачем - лучше не лезть

Почему в шаблоне связанный товар отображается на всех товарах? а не для каждого свой (если есть связанные товары)?

		$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, '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];
				}
				else
				{
					unset($related_products[$id]);
				}
			}
			$this->design->assign('related_products', $related_products);
		}

 

Ссылка на сообщение
Поделиться на другие сайты
1 час назад, get31 сказал:

Почему в шаблоне связанный товар отображается на всех товарах? а не для каждого свой (если есть связанные товары)?

Видимо, потому что автор так запрограммировал. 

По тому, что предоставлено, видно что они В ПРИНЦИПЕ не могут отображаться "для каждого свой", поскольку автор их свалил в одну кучу в одной переменной без  какого бы то ни было разделения.

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

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

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

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

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

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

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

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

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

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