[2.x.x] Универсальный виджет для товаров

Дополнение позволяет вывести товары на главную страницу сайта по фильтру.

Иногда нужно вывести на главнусю страницу сайта помимо хитов и акционных товаров еще и товары скажем из какоой то определенной категории, или товары по какому то фильтру (скажем товары по кейворду) и т.д.

 

И так приступим.

1. Откройте файл view/View.php, далее после строк

// Настраиваем плагины для смарти

зарегистрируем наш новый плагин для выборки товаров, вот так должно выыглядеть:

// Настраиваем плагины для смарти
$this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_plugin'));

 

2. Чуть ниже в этом же файле, после функции:

function fetch()
{
	return false;
}

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

public function get_products_plugin($params, &$smarty)
{
	if(!isset($params['visible']))
		$params['visible'] = 1;
	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);			
	}
}

3. В шаблоне используйте такой код для вывода товаров:

{get_products var=custom_products category_id=1 limit=3}
{if $custom_products}
<!-- Список товаров-->
<div class="products">
	{foreach $custom_products as $product}
	<!-- Товар -->
	<div class="product">
		<!-- Фото товара -->
		<a href="products/{$product->url}">
			{if $product->image}
			<div class="image">
				<img src="{$product->image->filename|resize:212:212}" alt="{$product->name|escape}">
			</div>
			{/if}
			<p>{$product->name|escape}</p>
		</a>
		<!-- Фото товара (The End) -->
		
		<!-- Цена товара -->
		<form class="variants" action="/cart">
			<input id="featured_{$product->variant->id}" name="variant" value="{$product->variant->id}" type="radio" class="variant_radiobutton" checked style="display:none;"/>
			<strong class="price">{$product->variant->price|convert} {$currency->sign|escape}</strong>
			<input type="submit" class="buy-btn" value="Купить">
		</form>
		<!-- Цена товара (The End) -->
	</div>
	<!-- Товар (The End) -->
	{/foreach}
</div>
<!-- Список товаров (The End) -->
{/if}

Параметры для выбора товаров:

category_id - ID нужной для фильтра категории

limit - количество нужных товаров

brand_id - ID нужного для фильтра бренда

id - вывести товары по ID (пример id='1,2,3')

keyword - фильтр товаров по ключевому слову

visible - вывод только видимых товаров

featured - вывод только рекомендуемых товаров

discounted - вывести товары со скидкой (пример discounted=1)

in_stock - вывести товары которые есть в наличии (пример in_stock=1)

 

Боле подробно про все параметры запроса Вы можете посмотреть в файле api/Products.php в функции get_products.





Всего 6 комментариев

  1. Дмитрий
    #1

    Добрый день. Подскажите, как вставить фильтр товаров на главную страницу?

  2. Noxter
    #2

    Дмитрий, здравствуйте!

    Просто так не вставить фильтр на главную страницу, он не будет работать.

    Чтобы фильтр работал с главной страницы, нужна индивидуальная доработка движка.

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

     

  3. DarAmal
    #3

    Добрый день, Noxter.

    Вставляю в main.tpl

    {get_products var=custom_products category_id=77 limit=5}
    {if $custom_products}
    <div class="maintitle mar-b-50 huawei">
    <b></b><span><a href="/catalog/huawei-mobile" rel="tooltip" title='Смотреть все смартфоны Huawei'>Смартфоны Huawei <span class="i-angle-double-right"></span></a></span><b></b></div>
    <div class="max huawei">
        <div class="related">
                    <ul class="catprods">
                   {foreach $custom_products as $product}
                    {include file='product_iteam.tpl'}
                    {/foreach}
                    </ul></div>
        <div class="alllink pad-t-30"><a href="/catalog/huawei-mobile">Смотреть все смартфоны Huawei</a></div>
    </div>
    {/if}

     

    Но ничего не тянет.

    но если вместо category_id=77 вставляю к примеру brand_id=24, то отображается.

  4. Noxter
    #4

    DarAmal, попробуйте так:

    {get_products var=custom_products category_id=[77] limit=5}



  5. DarAmal
    #5

    Noxter,

    Спасибо за ответ. К сожалению, не реагирует ни как. В файле view/View.php поставил все, что нужно.

  6. Noxter
    #6

    DarAmal, вам уже дали ответ на форуме.

     

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