Документация

Характеристики товара

Как вывести характеристики в теме: одна строка на характеристику, несколько значений, цвета, ссылки и значения вариантов покупки.

На этой странице

Характеристики — это «Цвет: красный», «Класс: 33», «Вес: 275 г». Магазин собирает их в одном месте и отдаёт шаблону готовыми: тема ничего не форматирует и никуда не ходит, она перебирает список и рисует его так, как задумано в оформлении.

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

Где они есть

Где Переменная
Страница товара, полный список $product.features
Страница товара, первые пять $product.short_features
Страница товара, одна нужная $product.features_by_code.<код>
Карточка в подборке и в каталоге $product.features
Позиция корзины $item.features

У товара без характеристик это пустой список, а не отсутствующее поле, так что {if $product.features} безопасно.

Что лежит в каждой строке

Поле Что это
name название: «Цвет», «Вес»
value значение готовой строкой: «красный, синий», «275 г», «Да»
values те же значения по отдельности (см. ниже)
code код характеристики — по нему берут конкретную
unit единица подписью: «кг», «м²»
link адрес подборки, если дополнение его дало
icon адрес значка характеристики или null
sku_id номер варианта покупки, если значение принадлежит ему
id номер характеристики в справочнике

Значение уже отформатировано магазином. Число идёт вместе с единицей («275 г»), «да/нет» — словами, значение из словаря — с подписью на языке витрины. Собирать эту строку самим не нужно: если тема начнёт форматировать по-своему, на сайте будет «0.800», а в накладной «0,8 кг», и покупатель не поймёт, где правда.

Простой вывод выглядит так:

{foreach $product.features as $f}
    <div class="spec">
        <span class="spec__name">{$f.name}</span>
        <span class="spec__value">{$f.value}</span>
    </div>
{/foreach}

Несколько значений у одной характеристики

У «Цвета», «Материала» или «Интернета» значений бывает несколько. Строка при этом остаётся одна: магазин перечисляет значения в value через запятую — «WAP, 4G, 3G, EDGE, GPRS». Три строки «Цвет» подряд покупатель читает как ошибку каталога.

Если вам нужно больше, чем строка через запятую, переберите values. У каждого значения есть:

Поле Что это
label подпись значения
color цвет из справочника, если он задан у значения
link адрес подборки именно по этому значению
id номер значения в справочнике

Так значения выводит базовая тема — цветные показываются кружком, а ссылка ведёт на то значение, по которому кликнули:

{foreach $f.values as $v}{if !$v@first}, {/if}
    {if $v.color}<i class="spec-dot" style="background: {$v.color|escape}"></i>{/if}
    {if $v.link}<a href="{$v.link}">{$v.label}</a>{else}{$v.label}{/if}
{/foreach}

Всё выражение держат в одной строке намеренно: шаблоны выводят переносы и отступы как есть, и разложенный «красиво» перебор дал бы пробелы перед запятыми.

Ссылка у строки целиком (link) заполняется, только когда значение одно. У характеристики с тремя значениями непонятно, куда вела бы одна общая ссылка, поэтому там ссылки живут внутри values.

Значения, которые принадлежат варианту покупки

У варианта бывают свои значения: «вес 275 г» у одной фасовки и «310 г» у другой. Такие строки приходят отдельными, и у них заполнен sku_id. В разметку попадают строки всех вариантов сразу, а показывается набор выбранного — переключает их сам магазин, если тема пометила строки:

{foreach $product.features as $f}
    <tr{if $f.sku_id} data-spec-sku="{$f.sku_id}"{if $f.sku_id != $product.default_sku_id} hidden{/if}{/if}>
        <td>{$f.name}</td>
        <td>{$f.value}</td>
    </tr>
{/foreach}

Без этой пометки таблица останется от прежнего варианта: покупатель выберет другую фасовку, а вес увидит от предыдущей.

Чего в списке нет

Опций покупки. Цвет и размер, по которым покупатель выбирает вариант, — это не строка таблицы, а переключатель над ценой. Они приходят в $product.variants и описаны на странице «Данные товара». Иначе покупатель видел бы один и тот же цвет дважды: и кнопкой, и строкой характеристик.

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

Одна конкретная характеристика

Когда нужна не вся таблица, а одно значение — берите по коду:

{if $product.features_by_code.color}
    <span class="badge">{$product.features_by_code.color.value}</span>
{/if}

Набор полей там тот же самый, включая values. Код характеристики задаёт владелец магазина в справочнике, поэтому тема, рассчитывающая на конкретный код, должна переживать его отсутствие — как в примере выше.

Краткий список на первом экране

$product.short_features — первые пять характеристик товара. Это тот же формат, и выводится он тем же кодом; в базовой теме он стоит рядом с ценой, а полная таблица — во вкладке ниже. Полезно показать ссылку на неё, когда характеристик больше:

{if $product.features|@count > $product.short_features|@count}
    <a href="#specs">Все характеристики</a>
{/if}

Значок характеристики

У характеристики может быть свой значок — мелкая картинка рядом с названием: гирька у «Веса», щит у «Гарантии». Владелец загружает его в редакторе характеристики (PNG, JPG, WebP или SVG), а магазин отдаёт готовый адрес в поле icon. Значка нет — в поле null, и проверка {if $f.icon} безопасна.

Растровый значок приходит уменьшенным до 96 точек, SVG — как есть.

{foreach $product.features as $f}
    <div class="spec">
        <span class="spec__name">
            {if $f.icon}<img class="spec__icon" src="{$f.icon}" alt="" loading="lazy">{/if}
            {$f.name}
        </span>
        <span class="spec__value">{$f.value}</span>
    </div>
{/foreach}

Значок приходит везде, где приходит сама характеристика: и на странице товара, и на плитке в подборке. Тема сама решает, где его показывать, — в базовой теме он стоит в таблице характеристик.

Обновлено 25 августа 2026