К содержимому
Вывод в теме

Вывод в теме

Обновлено

Как данные попадают в шаблон

В конфигурации зарегистрирован обработчик 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 истинно, если выполнены все условия:

  1. Статус товара истинен.
  2. У артикула истинны available и status.
  3. Либо магазин игнорирует остатки при заказе, либо 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 и логику вашей темы.