Вывод в теме
Обновлено
Как данные попадают в шаблон
В конфигурации зарегистрирован обработчик frontend_products → frontendProducts. Он дополняет элементы массива products, полученного от Shop-Script. Если тема получает такой список в $products, поля доступны у каждого товара внутри цикла.
У плагина нет собственного ViewHelper, публичных методов вывода и шаблонов для переопределения. Вызывать хелпер плагина не нужно: примеры ниже читают уже подготовленный массив.
Артикулы: skus
skus берётся из объекта shopProduct. Плагин удаляет из этого массива артикулы с пустым status. Для оставшихся артикулов он:
- обнуляет
compare_price, если она задана и не превышаетprice; - форматирует общее количество и количества по складам с учётом
order_multiplicity_factor, если они не равныnull; - дополняет складские количества через
shopHelper::fillVirtulStock, если массив складов непустой.
Пример текстового списка артикулов:
{foreach $products as $product}
{if !empty($product.skus)}
<h3>{$product.name|escape}</h3>
<ul>
{foreach $product.skus as $sku}
<li>{$sku.name|escape} — {$sku.sku|escape}</li>
{/foreach}
</ul>
{/if}
{/foreach}Это пример вывода названий и кодов, без логики покупки. Наличие артикула в skus ещё не означает, что его можно заказать.
Характеристики выбора
| Поле | Структура и назначение |
|---|---|
sku_features |
Массив ID характеристики → ID значения для $product->sku_id; если данных нет, записывается пустой массив. |
features_selectable |
Характеристики выбора из объекта товара; варианты значений находятся в values. |
sku_features_selectable |
Массив строка комбинации → данные артикула. |
При подготовке features_selectable плагин сравнивает артикулы из таблицы характеристик с артикулами в $product->skus. Значение характеристики, которое встречается только у отсутствующих в $product->skus артикулов, удаляется, если в соответствующем наборе values больше одного значения.
Текстовый вывод доступных значений характеристик:
{foreach $products as $product}
{if !empty($product.features_selectable)}
<h3>{$product.name|escape}</h3>
{foreach $product.features_selectable as $feature}
<p>
{$feature.name|escape}:
{foreach $feature.values as $value}
<span>{$value|escape}</span>
{/foreach}
</p>
{/foreach}
{/if}
{/foreach}Тема должна самостоятельно связать выбор значения с поиском артикула, обновлением цены, изображения и формы покупки.
Карта комбинаций: sku_features_selectable
Ключ каждой записи составляется из пар ID характеристики:ID значения; в порядке обхода features_selectable. Ниже условный пример формата, а не идентификаторы вашего магазина:
12:34;56:78;В карту включаются записи характеристик только тех артикулов, которые присутствуют в $product->skus.
| Ключ записи | Значение |
|---|---|
id |
Идентификатор артикула. |
price |
Числовая цена после преобразования через shop_currency из валюты товара; форматированная строка с обозначением валюты не создаётся. |
available |
Результат проверки статусов товара и артикула, разрешения покупки и остатка. |
image_id |
Идентификатор изображения, приведённый к целому числу. |
compare_price |
Числовая зачёркнутая цена после преобразования валюты; ключ добавляется только при непустой исходной цене. |
available истинно, если выполнены все условия:
- Статус товара истинен.
- У артикула истинны
availableиstatus. - Либо магазин игнорирует остатки при заказе, либо
countравенnull, либо остаток не меньше минимального количества заказа.
Для последней проверки берётся непустое order_count_min артикула, иначе — значение товара.
Карта комбинаций строится до обработки skus. Поэтому правило обнуления зачёркнутой цены, не превышающей обычную цену, применяется к skus, но не к sku_features_selectable. При выводе цены из карты тема должна учитывать это различие.
Если несколько артикулов дают одинаковый ключ комбинации, последующая запись заменяет предыдущую. При отсутствии характеристик выбора ключ может быть пустой строкой. Для обычного списка артикулов используйте skus, не рассчитывая, что карта комбинаций обязательно содержит каждый артикул.
Склады и параметры количества
| Поле товара | Источник |
|---|---|
stocks |
$product->stocks. |
formatted_units |
shopFrontendProductAction::formatUnits(shopHelper::getUnits()). |
fractional_config |
shopFrac::getFractionalConfig(). |
Это данные и результаты методов Shop-Script. Собственную структуру единиц измерения, настройки дробности или складов плагин не вводит. Для их использования ориентируйтесь на код установленной версии Shop-Script и логику вашей темы.