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

Теги шаблонів: довідник

Гроші, кількості, посилання, переклади, ескізи фотографій, підключення стилів і скриптів — усі теги з прикладами.

На цій сторінці

Крім звичайних підстановок, умов і циклів Smarty, темі доступні теги самого магазину. Нижче — усі вони.

Тег Для чого
{money} сума з валютою
{qty} дробова кількість
{url} адреса розділу вітрини
{trans} напис теми, зокрема з відмінюванням
{thumb} ескіз фотографії потрібного розміру
{csrf_field} {csrf_token} захист форми
{captcha} перевірка «я не робот»
{asset_css} {asset_js} підключити свій стиль або скрипт
{assets_head} {assets_footer} вивести зібраний список файлів
{hook} місце для доповнень
{dump} {dumpc} подивитися, що прийшло в шаблон

Гроші

{money amount=$product.price currency=$storefront.currency}
{money amount=$order.total currency=$order.currency}
{money amount=$shop->cartTotal() currency=$storefront.currency precision=0}
Параметр За замовчуванням Що задає
amount 0 сума
currency USD валюта
locale поточна мова як розділяти розряди і дробову частину
precision як у валюті скільки знаків після коми

⚠️ Валюту передавайте завжди. За замовчуванням тег форматує суму доларами, і на тестовому магазині з валютою за замовчуванням помилку не видно — а в гривневому магазині ціна поїде з доларовим знаком.

precision=0 знадобиться там, де копійки ламають верстку: сума кошика в шапці, підпис на картці.

Тег тільки форматує число. Рахувати в шаблоні не потрібно і не можна — чому, написано на сторінці Ціни, кількості і валюта.

Кількості

{qty value=$item.qty} {$item.unit}     →  30,8 м²

Товари бувають дробовими: метри, кілограми, площа. Тег виводить число по-місцевому («30,8», а не «30.8»), відкидає хвостові нулі («2», а не «2,000») і не ставить розділювач розрядів — це саме число підставляється в поле введення кількості, а «1 200» браузер прочитав би як «1».

Адреси розділів

<a href="{url path='/search'}">Пошук</a>
<a href="{url path='/'}">На головну</a>
<a href="{url path='/cart' locale='uk'}">Кошик</a>
Параметр За замовчуванням Що задає
path / шлях розділу
locale поточна мова мова, якою відкрити розділ
absolute ні повна адреса з доменом замість шляху

Тег сам додає мовний префікс і приводить адресу до вигляду, прийнятого в магазині. Повна адреса потрібна тільки пошуковику — для посилань усередині сайту беріть звичайну.

Адреси товарів, категорій, брендів, міток і сторінок уже приходять готовими в даних ($product.url, $cat.url). Склеювати їх руками не можна: схему адрес обирає власник магазину. Подробиці — на сторінці Адреси розділів і мови.

Написи теми

{trans key="shop.cart"}
{trans key="shop.products_count" count=$total}
{trans key="shop.hello" name=$customer.first_name}

Рядок береться з файлу теми locale/<мова>.json, а якщо ключа там немає — з написів самого магазину. Не знайшлося ніде — виведеться сам ключ: сторінка не падає, але у верстці висітиме shop.cart.

Усе, крім key, вважається підстановкою: {trans key="shop.hello" name="Іван"} підставить ім'я замість :name у рядку.

Параметр count вмикає вибір форми за числом — «1 товар», «2 товари», «5 товарів». Як записати такий рядок, написано на сторінці Тексти теми і мови.

Ескізи фотографій

<img src="{thumb src=$product.image size=320}" alt="{$product.name}">
<img src="{thumb src=$product.image size=120 type='crop'}" alt="">
type Що робить
max (за замовчуванням) вписує картинку цілком у квадрат зі стороною size
crop обрізає до квадрата size × size
width задає ширину, висота рахується сама
height задає висоту, ширина рахується сама

Ескізи нарізаються на вимогу: перший покупець, який відкрив сторінку, чекає нарізку, далі файл віддає веб-сервер напряму. Якщо можливість вимкнена в налаштуваннях або файл лежить не на публічному диску, тег поверне вихідну адресу — картинка покажеться, просто в повному розмірі.

Форми

<form method="post" action="/reviews/submit">
    {csrf_field}
    …
    {captcha form="reviews"}
    <button type="submit">Надіслати</button>
</form>

{csrf_field} ставить приховане поле — без нього форма не пройде. {csrf_token} віддає той самий ключ рядком; у каркас його вставляти не треба — мета-тег csrf-token друкує магазин, а скриптам ключ приходить у CartiX.csrf.

{captcha form="…"} сам питає, чи ввімкнена перевірка «я не робот» для цієї форми, і малює потрібний віджет. Перевірка вимкнена — тег не виводить нічого, і гілку {if} навколо нього писати не треба.

Докладніше — на сторінці Форми вітрини.

Стилі і скрипти

{block name="page_assets"}
    {asset_css file="css/product.css"}
    {asset_js file="js/product.js" defer=true}
{/block}
Параметр Що робить
file шлях усередині assets/ вашої теми
inline вставити вміст прямо в сторінку, а не посиланням
key ім'я, за яким файл не підключиться двічі
head / footer куди виводити
решта їдуть атрибутами в <link> або <script>

{assets_head} і {assets_footer} виводять зібраний список. Подробиці і підступи — на сторінці Стилі, скрипти і картинки теми.

Місце для доповнень

{hook name="product.buybox.end" product=$product}

Сюди доповнення виводять свою розмітку. Підписників немає — тег не виводить нічого. Кожне доповнення викликається окремо і в захисті від помилок: те, що впало, не виводить нічого, сторінка залишається живою.

Усе, що передано параметрами, їде доповненню — тому корисно передавати контекст: товар, позицію кошика. Повний список місць — на сторінці Точки для доповнень.

Подивитися, що прийшло в шаблон

{dump}                    усе, що доступне цьому шаблону
{dump var=$product}       одне значення
{dumpc var=$product}      те саме в консоль браузера
{$product|dump nofilter}  звичним записом

Бачить тільки співробітник магазину. Покупцеві блок не покажеться, навіть якщо тег забули в темі. Паролі, ключі і підписи у виводі замінюються зірочками, глибина обмежена шістьма рівнями, довгі списки і рядки обрізаються.

Теги доповнень

Доповнення може завести власний тег — він з'явиться в усіх темах одразу. Встановлені зараз:

Тег Доповнення
{slider id="home-hero"} Слайдери і банери
{slider_data id="home-hero" assign=hero} те саме, віддає дані в змінну
{oneclick_button product=$product} Купити в один клік
{back_in_stock product=$product} Повідомити про надходження
{callback_button} Зворотний дзвінок
{shorturl url=$product.url} Короткі посилання

Тег вимкненого доповнення, залишений у шаблоні, не ламає сторінку — він просто нічого не виводить. Тому тема може посилатися на теги доповнень, не перевіряючи, чи стоять вони.

Що приносить встановлене доповнення, видно двома способами: у його описі в розділі «Доповнення» і за текою templates/plugins/<доповнення>/ у вашій темі — доповнення з власною розміткою кладе шаблони прямо туди.

Обробники значень

У Smarty 5 в шаблон не можна писати будь-яку функцію мови. Магазин повертає безпечний набір:

Текст. ucfirst, lcfirst, ucwords, trim, ltrim, rtrim, str_pad, str_replace, str_contains, str_starts_with, str_ends_with, sprintf, strrev, mb_strlen, mb_substr, mb_strtolower, mb_strtoupper, urlencode, rawurlencode, htmlspecialchars_decode.

Числа. abs, ceil, floor, intval, floatval, max, min, intdiv.

Списки. array_keys, array_values, array_slice, array_reverse, array_sum, array_unique, array_flip.

Налагодження. dump, dumpc.

Крім того, працює все, що Smarty вміє сам: count, round, implode, substr, json_encode, date_format, escape, default, upper, nl2br, truncate, strip_tags.

{$product.name|mb_strtoupper}
{$product.summary|truncate:120:'…'}
{$product.price|default:0}
{$order.created_at|date_format:'%d.%m.%Y'}

Незнайомий обробник сторінку не ламає: значення проходить наскрізь, а ім'я йде в журнал. Так друкарська помилка не перетворюється на білий екран у покупця — але й не дає про себе знати, тому перед викладкою в журнал варто зазирнути.

Екранування

Усе, що виводиться, екранується саме. {$product.name} безпечний завжди, навіть якщо в назві товару є < або лапки.

Там, де дані містять готову розмітку, потрібен nofilter:

{$page.content nofilter}       вміст інформаційної сторінки
{$product.description nofilter} опис товару
{$product.json nofilter}       карта варіантів купівлі для браузера

Забули nofilter — покупець побачить текст із &lt;p&gt; замість абзаців.

Чого в темі немає

Теги {sum}, {in_words}, {number} і {profile} стосуються друкованих бланків — рахунків, накладних, чеків, — а не вітрини. У шаблоні теми їх немає. Про них написано в розділі Друковані бланки.

Оновлено 25 серпня 2026