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

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

Порой есть необходимость получить список товаров по какому-то определенному критерию, будь-то товары схожего бренда в карточке товаров, или новинки конкретной категории или бренда. Сделаем небольшой универсальный виджет для SimplaCMS, который позволит выбирать товары «напрямую». Правда надо будет запомнить небольшой набор параметров, которые можно передавать в виджет, чтобы набор выбранного товара был корректен.

Как и все виджеты в 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 первых товара, отсортированных по-умолчанию. Но поскольку это не очень интерено, то привожу список какие наборы товаров мы может получить, причем в различных комбинация. Итак, параметры и их значения

Читайте также  Указываем телефон в настройках Simpla

limit с числовым значение указывает какое количество товара долно быть в выборке
discounted — передав данный параметр со значение 1 мы получим товары со скидкой
featured со значение 1 вернет рекомендуемые товары
sort может принимать 4 значения — name, created, position и price — вернет товары в той сортировке, которую указали
in_stock со значением 1 указывает, что надо только те товары, которые есть в наличии
brand_id с числовым индексом бренда вернет товары указанного бренда
category_id с числовым индексом категории вернет товары указанной категории
keyword со значение к примеру «Samsung» вернет товары где в названии или META встречается указанное слово (поиск по названию)
Первый 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, то мы и передаем его значение в наш виджет.

Читайте также  Добавление поле бренд и артикул в файл экспорта yandex.xml Simpla

Задача 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}

{$c->name}

{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!

Вывод всех товаров категории на странице товара. S... открываем view/View.php регистрируем функцию: $this->design->smarty->registerPlugin("function", "get_products", array($this, 'get_products_p...
Указываем телефон в настройках Simpla... Намного удобнее указывать телефон только в одном месте, ведь если номер поменяется — удобнее поменять только в настройках в админке, че...
Несколько полезностей для Simpla 2.x... Переносим выбор варианта оплаты на первую страницу оформления заказа Автоматически создаваемый артикул как ID товара Выбор количества товара перед п...
Сортировка по ценам Simpla. Сортировка по цене от «дорогой к низкой» и от «низкой к дорогой». При этом все товары с нулевой ценой отображаются в конце списка и не ...

Сохрани, чтобы не потерять