Теги шаблонів: довідник
Гроші, кількості, посилання, переклади, ескізи фотографій, підключення стилів і скриптів — усі теги з прикладами.
На цій сторінці
Крім звичайних підстановок, умов і циклів 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 — покупець побачить текст із <p> замість абзаців.
Чого в темі немає
Теги {sum}, {in_words}, {number} і {profile} стосуються друкованих
бланків — рахунків, накладних, чеків, — а не вітрини. У шаблоні теми їх немає.
Про них написано в розділі
Друковані бланки.