Мастерская iPloGic
+7 (926) 961-66-26

 — База знаний — Как вывести характеристики в списке товаров в Webasyst Shop-Script

Как вывести характеристики в списке товаров в Webasyst Shop-Script

Webasyst Shop-Script мощная и гибкая система для быстрого создания интернет-магазинов. Однако зачастую разработчики встают перед простыми, казалось бы, проблемами, которые сложно решить из-за недостаточной документированности методов API. Одной из таких задач является вывод в списках товаров характеристик товаров с названиями. Если товары однотипные, то все проще. Названия можно забить в товар вручную, а вот если у товаров могут быть произвольные наборы свойств, то все становится сложнее.

Итак, что же нам надо сделать. Рассмотрим на примере списка товара в разделе (list-thumbs.html), но алгоритм такой-же в любом списке, поменяться могут только имена переменных.

{* начало файла *}
<!-- products thumbnail list view -->

{* получаем id всех товаров списка *}
{$ids = array()}
{foreach $products as $item}
{$ids[] = $item.id}
{/foreach}
{* получаем все продукты по списку id *}
{$items = $wa->shop->products($ids)}
{* получаем список свойств с типами и названиями *}
{$features = $wa->shop->features($items)}

..............  код шаблона ................

{foreach $products as $p}

..............  код шаблона ................


            {* а эту таблицу вставляем в цикле *}
            <!-- product features -->
            {$product = $items[$p.id]}
            {if $product.features}
                <table class="features" id="product-features">
                    {foreach $product.features as $f_code => $f_value}
                        <tr{if $features[$f_code].type == 'divider'} class="divider"{/if}>
                            <td class="name-s">
                                {$features[$f_code].name|escape}
                            </td>
                            <td class="value" itemprop="{$f_code|escape}">
                                {if is_array($f_value)}
                                    {if $features[$f_code].type == 'color'}
                                        {implode('<br /> ', $f_value)}
                                    {else}
                                        {implode(', ', $f_value)}
                                    {/if}
                                {else}
                                    {$f_value}
                                {/if}
                            </td>
                        </tr>
                    {/foreach}
                </table>
            {/if}


..............  код шаблона ................

{/if}

..............  код шаблона ................


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



01.09.2016