Часто шукають

↑↓ вибрати ↵ відкрити Усі результати →

Розробникам · Теми

Довідник Liquid

Що бачить шаблон теми: глобальні обʼєкти, дані товару, каталогу, кошика й блогу, section і template, фільтри, теги й ліміти.

Контракт даних тем — версія 1, назви як у Shopify, snake_case. Зміни лише додають поля. Обʼєкт, якого немає на сторінці, — nil: перевіряйте {% if product %}. Ціни бувають двох видів: число в мінорних одиницях (копійки) — для фільтра money, і вже відформатований рядок — його виводять як є.

Глобальні обʼєкти

Доступні в кожній секції, сніпеті й {% render %}, на будь-якій сторінці.

ОбʼєктТипЩо
shopобʼєктМагазин: назва, адреса, мова, валюта, контакти.
requestобʼєктПоточний запит: мова, шлях, вид сторінки, превʼю редактора.
routesобʼєктАдреси головних сторінок мовою сторінки.
settingsобʼєктГлобальні налаштування теми з config/settings_schema.json.
linklistsобʼєктМеню магазину за handle: linklists.main, linklists['footer-store'].
collectionsобʼєктКатегорія за handle: collections['kava']; collections.all — увесь каталог.
metaobjectsобʼєктЗаписи типів контенту: metaobjects.<тип>.<handle>, metaobjects.<тип>.values.
blogsобʼєктСвіжі статті: blogs.news — увесь блог, blogs.<код рубрики> — рубрика.
brandsобʼєктbrands.all — бренди з опублікованими товарами.
customerобʼєкт або nilПокупець, що увійшов; nil для гостя.

shop, request, routes

ПолеТипЩо
shop.nameрядокНазва бренду з налаштувань, інакше назва сайту з SEO.
shop.urlрядокАдреса вітрини.
shop.localeрядокМова сторінки: uk, en …
shop.currencyрядокКод основної валюти: UAH.
shop.phone, shop.emailрядокКонтакти з «Налаштувань»; порожній рядок, якщо не задано.
shop.address.summary, shop.working_hoursрядокАдреса й графік роботи з «Налаштувань»; порожній рядок, якщо не задано. Тема не пише власних.
shop.metafields.custom.<ключ>різнеВласні поля магазину (групи полів).
request.localeрядокМова сторінки.
request.pathрядокШлях без домену й параметрів: /catalog/kava.
request.page_typeрядокproduct, collection, search, blog, article, cart, metaobject або page (решта, також шапка й підвал).
request.design_modeтак/ніtrue лише в превʼю редактора: підказки власнику показуйте тільки тоді.
routes.root_urlрядокГоловна.
routes.search_urlрядокПошук.
routes.cart_urlрядокКошик.
routes.collections_url, routes.all_products_collection_urlрядокКаталог.

linklists — меню

linklists.<handle>: handle, title, levels (глибина) і links. Кожен пункт:

ПолеТипЩо
titleрядокНазва пункту мовою сторінки.
urlрядокШлях у магазині (/catalog/kava) або повна адреса іншого сайту.
activeтак/ніШлях пункту збігається зі сторінкою.
currentтак/ніЗбігаються ще й параметри запиту.
child_active, child_currentтак/ніТе саме для будь-якого вкладеного пункту.
levelsчислоСкільки рівнів під пунктом.
linksсписокВкладені пункти тієї самої форми.
keyрядок або nilСтабільний id пункту; не змінюється при перейменуванні. nil у вбудованому меню, яке власник ще не зберіг.
imageрядок або nilКартинка пункту.
badgeобʼєкт або nil{title, tone}; tone — accent, sale або muted.
icon_svgрядок або nilІконка з бібліотеки ядра готовим <svg class="sf-menu-icon"> у кольорі тексту.
icon_urlрядок або nilВласна SVG-іконка як data:-адреса — для <img> або CSS-маски.

collections, blogs, brands, metaobjects

ПолеТипЩо
collections['handle'].title, .handle, .urlрядокКатегорія за кодом з адреси.
collections['handle'].imageрядок або nilКартинка категорії.
collections['handle'].productsсписок картокДо 12 товарів категорії (картка — нижче).
collections['handle'].products_countчислоОпубліковані товари разом з підкатегоріями.
collections['handle'].metafields.custom.<ключ>різнеВласні поля категорії.
collections.allобʼєктУвесь каталог: title, handle = all, url, products — 12 найновіших, products_count. Категорія з кодом all має перевагу.
blogs.news.title, .urlрядокБлог.
blogs.news.articlesсписок статейДо 12 найновіших; blogs.<код рубрики> — статті рубрики, невідомий код — nil.
brands.allсписокДо 24 брендів: title, url, logo.
metaobjects.<тип>.<handle>запис або nilОпублікований запис: handle, title, url і поля за ключами.
metaobjects.<тип>.valuesсписок записівДо 50 опублікованих, у порядку типу.

Поля запису: текст, число, дата, колір і посилання — як є; фото й файл — URL; список фото — масив URL; посилання на товар, категорію, сторінку чи запис — ідентифікатори; повторювач — масив рядків з тими самими правилами.

Картка товару в списках

Однакова у всіх списках: collections[…].products, collections.all.products, collection.products, search.results, product.related_products і налаштування product та product_list.

ПолеТипЩо
idчислоId товару — для {% component 'product.card', product: p.id %}.
handleрядокКод з адреси.
titleрядокНазва.
urlрядокШлях до товару.
availableтак/ніЄ в наявності.
priceчислоНайменша ціна в копійках: {{ p.price | money }}.
compare_at_priceчисло або nilСтара ціна, лише коли вона більша за ціну.
featured_imageфото або nilПерше фото.
imagesсписок фотоУсі фото.
variant_idчисло або nilВаріант, який купує {% component 'commerce.add-to-cart', variant: p.variant_id %}.

Сніпет отримує іншу картку — з готовими цінами, знижкою, бейджами й кольорами: див. Сторінки теми.

Фото

ПолеТипЩо
srcрядокОригінал.
altрядокОпис фото; у фото товару — назва товару.
width, heightчисло або nilРозмір оригіналу.
srcsetрядокГотові розміри WebP 320–1920 px для srcset.
srcset_avifрядокТе саме в AVIF.
object_positionрядокТочка фокусу з редактора фото; 50% 50% без неї. Для рамки з object-fit: cover.

Налаштування image_picker секції — лише URL, не обʼєкт фото. Фото в картці сніпета product-card мають src, srcset, width, height і alt.

product — сторінка товару

На сторінці товару (request.page_type = product) і в сніпеті product-page.

ПолеТипЩо
id, title, urlчисло, рядокТовар.
descriptionрядок HTMLОпис; без нього — короткий опис.
short_descriptionрядокКороткий опис.
availableтак/ніЄ в наявності.
priceчислоЦіна в копійках.
currencyрядокКод валюти.
images, featured_imageсписок фото, фотоФото товару.
variantsсписок{id, title, available, price} — price у копійках.
selected_or_first_available_variantваріант або nilВибраний, інакше перший у наявності, інакше перший; з полем attributes.
tagsсписок рядківМітки товару.
attributes.<код>обʼєктХарактеристика: name, type, unit, group (розділ таблиці), variant_axis, values [{name, slug, color, url}]; url веде в каталог з цим фільтром, якщо він є. Ключ — код характеристики або attribute_<id>.
related_productsсписок картокДо 8: «З цим купують», потім новинки основної категорії.
vendorрядокНазва бренду або порожньо.
brandобʼєкт або nil{title, url, logo}.
metafields.<простір>.<ключ>різнеПоля, видимі на вітрині: характеристики із застосунків, метаполя, metafields.custom — власні поля товару.
breadcrumbsсписокЛише в product-page: категорії над товаром [{name, url}].

collection, search, blog, article, page

ПолеТипЩо
collection.title, .urlрядокКаталог, категорія, бренд або SEO-сторінка фільтра.
collection.kindрядокcatalog, category або brand.
collection.productsсписок картокТовари поточної сторінки з урахуванням фільтрів.
collection.products_countчислоСкільки знайдено.
collection.paginateобʼєкт або nil{current_page, pages, items}.
collection.metafields.customобʼєктВласні поля категорії.
search.termsрядокЗапит.
search.results, .results_count, .paginateсписок, число, обʼєктЗнайдені товари.
blog.articles, .paginateсписок, обʼєктСтатті сторінки блогу.
blog.tagрядокВідкритий тег або порожньо.
blog.category, blog.authorобʼєкт або nilНа сторінці рубрики чи автора.
article.id, .title, .excerpt, .urlрізнеСтаття.
article.published_atрядокДата ISO 8601: {{ article.published_at | date: '%d.%m.%Y' }}.
article.tags, .imageсписок, фотоТеги й обкладинка.
article.categoryобʼєкт або nil{title, handle, url, description}.
article.authorобʼєкт або nil{name, handle, url, position, bio, image, links}.
article.metafields.customобʼєктВласні поля статті.
page.id, .title, .handle, .urlрізнеСторінка магазину; у вкладеної url — повний шлях.
page.metafields.customобʼєктВласні поля сторінки.
entry, content_typeобʼєктСторінка запису (page_type = metaobject): запис як у metaobjects і тип {handle, name, name_plural, url}.

Пагінація — обʼєкт paginate з current_page, pages і items. Тегу {% paginate %} немає: перемикач сторінок і фільтри малює компонент catalog.results, а в пошуку — search.results.

cart, checkout, order, customer

ПолеТипЩо
cart.itemsсписок{title, variant, quantity, price, line_price, image}; price і line_price — готові рядки, image — URL мініатюри.
cart.item_countчислоСкільки одиниць у кошику.
cart.upsell_countчислоСкільки товарів «З цим купують»; заголовок над cart.upsell показуйте, коли більше 0.
checkout.item_countчислоУ сніпеті checkout.
checkout.subtotal, .totalрядокГотові суми.
checkout.currencyрядокКод валюти.
checkout.modeрядокnew — новий покупець, registered — зареєстрований.
order.reference, .statusрядокУ сніпеті order-page.
order.subtotal, .total, .currencyрядокСуми замовлення.
order.linesсписок{title, variant_title, quantity, line_price}.
order.shipping_methodрядокСпосіб доставки.
customer.id, .first_nameчисло, рядокПокупець, що увійшов.
customer.metafieldsобʼєктМетаполя покупця, видимі на вітрині.

section, block, template

ПолеТипЩо
section.idрядокId секції на сторінці — для унікальних id в розмітці.
section.settings.<id>різнеЗначення налаштувань поверх default схеми.
section.blocksсписокБлоки в порядку, який задав власник.
block.id, block.typeрядокtype — тип зі схеми або @app для блоку додатка.
block.settings.<id>різнеНалаштування блоку.
block.attributesрядок<div {{ block.attributes }}> дає вибір блоку кліком у превʼю; на вітрині порожньо.
template.nameрядокВид сторінки: product, collection, cart, blog …
template.suffixрядок або nilНазва шаблону: gift для product.gift; nil для default.
template.settings.<id>різнеНалаштування зі {% schema %} сніпета сторінки.
Тип налаштуванняЩо отримує Liquid
text, textareaТекст мовою сторінки.
richtextHTML.
checkboxtrue або false.
number, rangeЧисло.
select, radiovalue вибраного варіанта.
color, urlРядок.
image_pickerURL фото або nil.
link_listМеню як у linklists або nil.
collectionКатегорія як collections['handle'] або nil.
collection_listДо 12 категорій.
productКартка товару або nil.
product_listДо 12 карток.
metaobject, metaobject_listЗапис або до 50 записів.

Видалене й неопубліковане випадає. У глобальних налаштуваннях теми (settings) посилання на каталог лишаються ідентифікаторами.

Фільтри

ФільтрЩо робить
moneyКопійки → ціна з валютою у валюті, яку обрав покупець: {{ p.price | money }}.
money_without_currencyТе саме без знака валюти.
image_urlФото або URL → адреса; з width: 600 — найменший WebP від 600 px; height рахує ширину за пропорцією.
image_tagФото → <picture> з AVIF і WebP; параметри sizes, alt, class, loading, width. URL або фото без розмірів — звичайний <img>.
asset_urlФайл з assets/ → його адреса; порожньо, якщо файлу немає.
tКлюч → слово мовою сторінки (докладно — /docs/theme-translations).
jsonЗначення → JSON, безпечний усередині <script>.
script_tag, stylesheet_tagЛише в магазині з дозволеним JavaScript; в інших нічого не виводять.

Стандартні фільтри Liquid: abs, append, at_least, at_most, capitalize, ceil, compact, concat, date, default, divided_by, downcase, escape, escape_once, find, find_index, first, floor, has, join, last, lstrip, map, minus, modulo, newline_to_br, plus, prepend, reject, remove, remove_first, remove_last, replace, replace_first, replace_last, reverse, round, rstrip, size, slice, sort, sort_natural, split, squish, strip, strip_html, strip_newlines, sum, times, truncate, truncatewords, uniq, upcase, url_decode, url_encode, where. Невідомий фільтр — помилка рендеру.

Теги

ТегЩо
{% component 'тип', параметр: значення %}Ставить компонент ядра; лише дозволені в цьому місці (/docs/theme-components).
{% render 'сніпет', змінна: значення %}Сніпет теми; глобальні обʼєкти видно в ньому, section і block — ні. {% include %} немає.
{% render_block block %}Блок додатка (@app) у секції.
{% schema %}…{% endschema %}Схема секції; у сніпеті сторінки — налаштування template.settings.
{% stylesheet %}…{% endstylesheet %}CSS один раз на сторінку, скільки б копій секції не стояло.
{% javascript %}…{% endjavascript %}JavaScript один раз на сторінку; лише в магазині з дозволеним JavaScript.
assign, capture, if, unless, case, for, cycle, tablerow, increment, decrement, liquid, echo, raw, commentСтандартні теги Liquid.

Ліміти рендеру

ЩоЛіміт
Пошук категорій collections['…']20 на рендер, далі nil.
Рубрики blogs.<код>5 на рендер.
Типи metaobjects20 на рендер; до 50 записів у values.
Товари в одному списку12; related_products — 8.
Вивід одного рендеру200 000 символів (у магазині з дозволеним JavaScript — 800 000); секція в шапці чи підвалі — до 150 КБ власної розмітки, компоненти ядра не рахуються.
ПрисвоєнняМають ліміт за розміром значення: присвоюйте номер (forloop.index0), а не цілий товар.