Що бачить шаблон теми: глобальні обʼєкти, дані товару, каталогу, кошика й блогу, 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 лише в превʼю редактора: підказки власнику показуйте тільки тоді.
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.