Розробникам · Теми
Сторінки теми
Який сніпет малює яку сторінку: картка, товар, каталог, кошик, оформлення, блог, пошук, кабінет, вхід і 404. Дані кожної, обовʼязкові компоненти, налаштування шаблону й набір спільних сторінок.
Сторінку теми малює сніпет з певним імʼям у snippets/. Якщо тема має такий сніпет, він замінює основну область сторінки; шапка й підвал лишаються своїми секціями. Без сніпета, з помилкою в ньому або з порожнім результатом магазин показує сторінку свого дизайну — вітрина не лишається порожньою.
Який сніпет яку сторінку
| Сніпет | Сторінка | Дані | Обовʼязковий компонент |
|---|---|---|---|
| product-card | Кожна картка в каталозі, пошуку, добірках і блоках товарів | product (картка, нижче) | — |
| product-page, product-page--<шаблон> | Область товару: крихти, фото, опис, деталі | product, breadcrumbs, template | — |
| collection-page, collection-page--<шаблон> | Каталог, категорія, бренд, SEO-сторінка фільтра | collection, template | catalog.results |
| mini-cart | Вміст мінікошика (рамка — шухляда чи спливне вікно — магазину) | cart | cart.checkout-button |
| cart-page | Сторінка кошика | cart, template | cart.checkout-button |
| checkout | Оформлення замовлення всередині форми магазину | checkout | checkout.contact, checkout.delivery, checkout.app-fields, checkout.payment, checkout.submit |
| order-page | «Дякуємо за замовлення» | order | order.payment-details |
| blog-page | Блог, рубрика, автор, тег | blog, template | blog.posts |
| article-page | Стаття | article, template | article.content |
| search-page | Пошук | search, template | search.results |
| entry-page--<тип>, entry-page | Запис типу контенту | entry, content_type, template | — |
| entry-list-page--<тип>, entry-list-page | Список записів типу | content_type, template | entry.list |
| account-page--<розділ>, account-page | Розділ кабінету покупця | account | account.content |
| auth-page--<сторінка>, auth-page | Вхід, реєстрація, паролі | auth | auth.form |
| not-found-page | Сторінка 404 всередині вітрини | глобальні обʼєкти | — |
Обовʼязковий компонент, якого сніпет не поставив, додається після його розмітки: кошик без кнопки «Оформити» чи каталог без товарів нічого не продадуть. Глобальні обʼєкти (shop, request, routes, settings, linklists, collections …) доступні в кожному сніпеті.
Які компоненти дозволені на кожній сторінці — Компоненти ядра; поля обʼєктів — Довідник Liquid.
Варіанти сніпета
| Варіант | Коли береться |
|---|---|
| product-page--gift | Товар із шаблоном product.gift (призначений типу товару або категорії). |
| collection-page--sale | Категорія з шаблоном collection.sale. |
| entry-page--team, entry-list-page--team | Записи й список типу контенту team. |
| account-page--orders | Розділи: orders, wishlist, profile, email, addresses, security, marketing. |
| auth-page--login | Сторінки: login, register, forgot, reset. |
Спершу шукається сніпет з суфіксом, потім загальний. Шаблони товару й категорії створюються в редакторі дизайну й призначаються типу товару чи категорії.
Картка товару: product-card
Сніпет отримує свою картку — з уже відформатованими цінами, на відміну від карток у списках Liquid:
| Поле | Тип | Що |
|---|---|---|
| id, title, url | число, рядок | Товар; url — повна адреса. |
| price | рядок | Готова ціна: «1 250 ₴». |
| compare_at_price | рядок або nil | Стара ціна, коли вона більша. |
| on_sale | так/ні | Є стара ціна. |
| discount_percent | число або nil | Знижка в цілих відсотках — для «−14%». |
| available | так/ні | Є в наявності. |
| images, featured_image, second_image | фото | src, srcset, width, height, alt. |
| badges | список | [{label, tone}]. |
| variant_id | число або nil | Варіант для кнопки «У кошик». |
| category | обʼєкт або nil | Основна категорія {title, url} — лише коли текст сніпета згадує product.category. |
| colors | список | [{name, color, image, url, available}] — лише коли сніпет згадує product.colors або product.sizes; порожній, якщо колір один. |
| sizes, size_name | список, рядок | [{name, available}] і назва опції розміру — за тієї самої умови. |
Свої кольори й розміри можна намалювати з product.colors, а можна поставити {% component 'product.swatches' %} — він робить те саме з підміною фото при наведенні.
Товар: product-page
Малює всю область товару: крихти, фото, опис і деталі. Смуга під товаром (схожі товари, відгуки, поставлені туди в дизайні) і липка панель лишаються дизайну. Отримує product, breadcrumbs і template.
<nav class="bloom-crumbs">{% for crumb in breadcrumbs %}<a href="{{ crumb.url }}">{{ crumb.name }}</a>{% endfor %}</nav>
<div class="bloom-product">
<div class="bloom-product__media">{% component 'product.gallery' %}</div>
<div class="bloom-product__summary">
{% component 'product.title' %}
{% component 'product.price' %}
{% component 'product.variant-picker' %}
{% component 'commerce.add-to-cart' %}
{% if template.settings.show_sku and product.selected_or_first_available_variant %}…{% endif %}
</div>
</div>
{% component 'product.description' %}
{% component 'product.specifications' %}
{% schema %}
{"settings": [{"id": "show_sku", "type": "checkbox", "label": "Показувати артикул", "default": false}]}
{% endschema %}Назва, ціна, галерея, наявність, вибір варіанта й кнопка «У кошик» — по одному на сторінку.
Каталог: collection-page
Малює заголовок, вступ і результати каталогу, категорії, бренду й SEO-сторінки фільтра; смуга під сторінкою лишається дизайну. Отримує collection і template. catalog.results — фільтри, сортування, сітка й сторінки одним компонентом зі станом сторінки; картки в ньому — ваш product-card, якщо він є. Розкладку фільтрів (збоку, зверху, шухляда) задають токени дизайну.
Кошик: mini-cart і cart-page
mini-cart малює вміст мінікошика, cart-page — сторінку кошика. Обидва отримують cart; порожній стан — {% if cart.item_count == 0 %}. Ціни в cart.items уже відформатовані так, як обрав власник; для власного числа — {{ сума | money }}, а не свій знак валюти. Налаштування шаблону (template.settings) має лише cart-page.
Оформлення: checkout
Розкладає оформлення всередині форми магазину з обʼєктом checkout і компонентами оформлення. Не пишіть власних полів чи кнопок оплати. Скрипти теми на оформленні, оплаті, «Дякуємо», вході й у кабінеті не виконуються ніколи, навіть у магазині з дозволеним JavaScript.
Блог, пошук, записи, кабінет, вхід, 404
| Сніпет | Обʼєкт | Поля |
|---|---|---|
| blog-page | blog | articles, paginate, tag, category, author |
| article-page | article | title, excerpt, url, published_at, tags, image, category, author, metafields |
| search-page | search | terms, results, results_count, paginate |
| entry-page | entry, content_type | поля запису за ключами; {handle, name, name_plural, url} |
| entry-list-page | content_type | {handle, name, name_plural, url} |
| order-page | order | reference, status, subtotal, total, currency, lines, shipping_method |
| account-page | account | section, title, menu [{key, label, url, active}], status |
| auth-page | auth | page (login, register, forgot, reset), title, status |
account.status і auth.status — повідомлення після дії (наприклад, «лист надіслано») або nil. article.content — блоки статті, які власник редагує в редакторі.
Налаштування шаблону
Сніпет сторінки може закінчуватися {% schema %} з settings, як секція. Редактор дизайну показує їх у бічній панелі цього шаблону, а сніпет читає їх як template.settings; template.name — вид сторінки, template.suffix — назва шаблону або nil для default.
| Сніпет | Де власник змінює налаштування |
|---|---|
| product-page, collection-page | Шаблон товару чи каталогу, для кожного шаблону окремо. |
| cart-page | Шаблон кошика. |
| blog-page, article-page, search-page | Шаблони блогу, статті, пошуку. |
| entry-page, entry-list-page | Шаблони записів. |
| інші сніпети сторінок | Ніде: template.settings — значення default зі схеми. |
Дайте шаблону те, що власник захоче змінити: показ артикулу, бік галереї, заголовки. Текст — з порожнім default і підставою з перекладу: {{ template.settings.title | default: 'tpl.cart_title' | t }}.
Набір спільних сторінок
Тема з "kit": "pages" у theme.json отримує з набору Storeforma кожен сніпет, якого не має сама, і файл assets/kit.css:
account-page auth-page cart-page checkout
entry-page entry-list-page mini-cart not-found-page
order-page search-page products-count
assets/kit.css- Перебити сторінку — покладіть у тему файл з тим самим імʼям: вашої теми перемагає сніпет набору.
- Вигляд — розмітка набору має класи , kit.css оформлює їх лише змінними . Поставте першим у і перебивайте у своєму CSS.
- Слова — сторінки набору говорять словами спільного словника (, , ); тема перебиває їх у своїх locales.
- products-count — дає «1 товар / 3 товари / 5 товарів» за правилами мови сторінки.
Сторінок товару, каталогу, картки, блогу й статті в наборі немає: їх тема малює сама або лишає дизайну. Тема без набору показує на решті сторінок дизайн магазину.