Универсальный виджет get_products

Универсальный виджет get_products

Дата публикации:
Поделиться:

Как и все виджеты в SimplaCMS мы добавим наш в файл view/View.php. После кода (~100 строка)

$this->design->smarty->registerPlugin("function", "get_discounted_products", array($this, 'get_discounted_products_plugin'));

добавим вызов нашего нового виджета

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

Теперь проще всего скопировать и модифицировать метод get_discounted_products_plugin, но я приведу уже готовый код - в конец файл перед закрывающей } добавим наш говый метод, который мы вызвали выше

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

Поскольку мы делаем плагин для клиентской части, то оставим $params['visible'], чтобы не выводились скрытые товары. С задачей закончили :) В любом файле шаблона теперь можем вызвать наш виджет по аналогии с тем, как выбираются новинки, например

{get_products var=all_products limit=3}
{if $all_products}
{foreach $all_products as $p}
//выводим товар в цикле
{/foreach}
{/if}

В приведенном виде в массиве $all_products будет выбрано 3 первых товара, отсортированных по-умолчанию. Но поскольку это не очень интерено, то привожу список какие наборы товаров мы может получить, причем в различных комбинация. Итак, параметры и их значения

Первый limit можно сказать основной параметр, т.к. ограничивает нашу выборку.

Последующие 3 - это общий случай стандартных виждетов get_discounted_products, get_featured_products и get_new_products соответственно.

brand_id и category_id в-принципе то, ради чего все и затевалось.

Теперь приведу несколько примеров использования плагина.

Задача 1: вывести максимум 5 новинки того же бренда, что и указанный в карточке товара

{get_products var=brand_products brand_id=$product->brand_id sort='created' limit=5}
{if $brand_products}
{foreach $brand_products as $p}
//выводим товар в цикле
{/foreach}
{/if}

Поскольку в SimplaCMS данные товара указаны в объекте $product, то мы и передаем его значение в наш виджет.

Задача 1.2: вывести 4 товара той же категории, что и указанной в карточке товара

{get_products var=cat_products category->id limit=5}
{if $cat_products}
{foreach $cat_products as $p}
//выводим товар в цикле
{/foreach}
{/if}

Поскольку в SimplaCMS данные товара указаны в объекте $product, то мы и передаем его значение в наш виджет.

Задача 2: вывести 3 товара со скидкой, которые есть в наличии

{get_products var=cat_products category_id=$category->id discounted=1 in_stock=1 limit=3}
{if $cat_products}
{foreach $cat_products as $p}
//выводим товар в цикле
{/foreach}
{/if}

Задача 3: вывести на главной по 4 рекомендуемых товара каждой "верхней" категории

{foreach $categories as $c}
{if $c->visible}{get_products var=cat_products category_id=$c->id featured=1 limit=4}
{if $cat_products}
<h3>{$c->name}</h3>
{foreach $cat_products as $p}
//выводим товар в цикле
{/foreach}{*foreach $cat_products as $p*}
{/if}{*if $cat_products*}
{/if}{*if $c->visible*}
{/foreach}{*foreach $categories as $c*}

Вот и все на сегодня. Удачи в работе с SimplaCMS!

Отзывы

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

Модули из этой тематики