Перейти к содержимому


Фото
* * * * * 1 голосов

Вывод всех товаров категории на странице товара


Best Answer DaVinci , 15.08.2014 - 18:38

открываем view/View.php регистрируем функцию:

 

$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));

ниже вставляем функцию

 

	public function get_products_plugin($params, &$smarty)
	{
		if(!empty($params['var']))
		{
			foreach($this->products->get_products($params) as $p)
				$products[$p->id] = $p;

			if(!empty($products))
			{
				// id выбраных товаров
				$products_ids = array_keys($products);

				// Выбираем варианты товаров
				$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true));

				// Для каждого варианта
				foreach($variants as &$variant)
				{
					// добавляем вариант в соответствующий товар
					$products[$variant->product_id]->variants[] = $variant;
				}

				// Выбираем изображения товаров
				$images = $this->products->get_images(array('product_id'=>$products_ids));
				foreach($images as $image)
					$products[$image->product_id]->images[] = $image;

				foreach($products as &$product)
				{
					if(isset($product->variants[0]))
						$product->variant = $product->variants[0];
					if(isset($product->images[0]))
						$product->image = $product->images[0];
				}
			}

			$smarty->assign($params['var'], $products);

		}
	}

 

открываем design/.../html/product.tpl

 

вызываем нашу функцию и выводим в шаблон товары

 

{* Товары категории *}
{get_products var=category_products category_id=$category->id limit=100}
{if $category_products}
<h2>Другие товары категории {$category->name|escape}</h2>
<!-- Список товаров-->
<ul class="tiny_products">

	{foreach $category_products as $cproduct}

	<!-- Товар-->
	<li class="product">

		<!-- Фото товара -->
		{if $cproduct->image}
		<div class="image">
			<a href="products/{$cproduct->url}"><img src="{$cproduct->image->filename|resize:200:200}" alt="{$cproduct->name|escape}"/></a>
		</div>
		{/if}
		<!-- Фото товара (The End) -->

		<!-- Название товара -->
		<h3><a data-product="{$cproduct->id}" href="products/{$cproduct->url}">{$cproduct->name|escape}</a></h3>
		<!-- Название товара (The End) -->

		{if $cproduct->variants|count > 0}
		<!-- Выбор варианта товара -->
		<form class="variants" action="/cart">
			<table>
			{foreach $cproduct->variants as $v}
			<tr class="variant">
				<td>
					<input id="new_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $v@first}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
				</td>
				<td>
					{if $v->name}<label class="variant_name" for="new_{$v->id}">{$v->name}</label>{/if}
				</td>
				<td>
					{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
					<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
				</td>
			</tr>
			{/foreach}
			</table>
			<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
		</form>
		<!-- Выбор варианта товара (The End) -->
		{else}
			Нет в наличии
		{/if}

	</li>
	<!-- Товар (The End)-->
	{/foreach}

</ul>
{/if}
Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
3 ответов в теме

#1 nitrol

nitrol
  • Пользователь
  • 73 сообщений

Опубликовано 15.08.2014 - 17:37

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

Может есть вариант с "$related_products_2" в котором сделать вывод?



#2 DaVinci

DaVinci
  • Фрилансер
  • 676 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 15.08.2014 - 18:38   Best Answer

открываем view/View.php регистрируем функцию:

 

$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));

ниже вставляем функцию

 

	public function get_products_plugin($params, &$smarty)
	{
		if(!empty($params['var']))
		{
			foreach($this->products->get_products($params) as $p)
				$products[$p->id] = $p;

			if(!empty($products))
			{
				// id выбраных товаров
				$products_ids = array_keys($products);

				// Выбираем варианты товаров
				$variants = $this->variants->get_variants(array('product_id'=>$products_ids, 'in_stock'=>true));

				// Для каждого варианта
				foreach($variants as &$variant)
				{
					// добавляем вариант в соответствующий товар
					$products[$variant->product_id]->variants[] = $variant;
				}

				// Выбираем изображения товаров
				$images = $this->products->get_images(array('product_id'=>$products_ids));
				foreach($images as $image)
					$products[$image->product_id]->images[] = $image;

				foreach($products as &$product)
				{
					if(isset($product->variants[0]))
						$product->variant = $product->variants[0];
					if(isset($product->images[0]))
						$product->image = $product->images[0];
				}
			}

			$smarty->assign($params['var'], $products);

		}
	}

 

открываем design/.../html/product.tpl

 

вызываем нашу функцию и выводим в шаблон товары

 

{* Товары категории *}
{get_products var=category_products category_id=$category->id limit=100}
{if $category_products}
<h2>Другие товары категории {$category->name|escape}</h2>
<!-- Список товаров-->
<ul class="tiny_products">

	{foreach $category_products as $cproduct}

	<!-- Товар-->
	<li class="product">

		<!-- Фото товара -->
		{if $cproduct->image}
		<div class="image">
			<a href="products/{$cproduct->url}"><img src="{$cproduct->image->filename|resize:200:200}" alt="{$cproduct->name|escape}"/></a>
		</div>
		{/if}
		<!-- Фото товара (The End) -->

		<!-- Название товара -->
		<h3><a data-product="{$cproduct->id}" href="products/{$cproduct->url}">{$cproduct->name|escape}</a></h3>
		<!-- Название товара (The End) -->

		{if $cproduct->variants|count > 0}
		<!-- Выбор варианта товара -->
		<form class="variants" action="/cart">
			<table>
			{foreach $cproduct->variants as $v}
			<tr class="variant">
				<td>
					<input id="new_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $v@first}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
				</td>
				<td>
					{if $v->name}<label class="variant_name" for="new_{$v->id}">{$v->name}</label>{/if}
				</td>
				<td>
					{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
					<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
				</td>
			</tr>
			{/foreach}
			</table>
			<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
		</form>
		<!-- Выбор варианта товара (The End) -->
		{else}
			Нет в наличии
		{/if}

	</li>
	<!-- Товар (The End)-->
	{/foreach}

</ul>
{/if}


#3 mart

mart

    Дружу с Симплой

  • Фрилансер
  • 1 331 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Venlo

Опубликовано 15.08.2014 - 19:18

To DaVinci:

Во-первых, если Вы репостите статью, то перепечатывайте ее правильно: вместо

{get_new_products var=category_products category_id=$category limit=100} 

надо вызывать (раз уж Вы описываете виджет get_products)

{get_products var=category_products category_id=$category limit=100} 

Во-вторых, почему бы просто не расместить ссылку на оригинал статьи - http://www.simplasho...et-get_products

 

Мне тоже хочется признания моих заслуг :)



#4 DaVinci

DaVinci
  • Фрилансер
  • 676 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:SimplaDev.ru

Опубликовано 15.08.2014 - 20:11

была задача - вывод всех товаров категории на странице товара. как пример поставил 100

 






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых