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
Возврат к списку