З чого складається тема
Повний список файлів і шаблонів: яка сторінка яким файлом малюється і що буде, якщо файлу немає.
На цій сторінці
Тема — це тека з чотирма частинами: маніфест, шаблони, файли оформлення і тексти.
themes/ваша-тема/
theme.json маніфест: ім'я, версія та налаштування теми
templates/ шаблони сторінок
assets/ css, js, картинки, шрифти
locale/ написи теми: ru.json, uk.json, en.json
Магазин вважає теку темою, тільки якщо в ній лежить theme.json. Усе
інше необов'язкове — тема без жодної картинки і без жодного перекладу
працює.
Шаблони
Ім'я файлу сторінки — це ще й назва розділу вітрини: воно приходить у шаблон
змінною $action (у головної — default). За нею зручно підсвічувати
активний пункт меню.
Якщо файлу сторінки немає, магазин візьме його зі стандартної теми. Так
працює тема, написана раніше, ніж у магазині з’явилася нова сторінка: добірка
товарів, блог. Відсутній шаблон береться з themes/default/templates, а каркас
layout.html, шапка, підвал і все з partials/ — як і раніше з вашої теми,
бо вона перевіряється першою. Сторінка відкривається й виглядає частиною сайту,
але всередині в неї розмітка стандартної теми, а її стилі (наприклад,
css/blog.css) шукаються у вашій темі й можуть не знайтися.
Щоб така сторінка була оформлена як решта сайту, скопіюйте шаблон зі стандартної теми до себе й доопрацюйте його:
themes/default/templates/product-list.html → themes/ваша-тема/templates/product-list.html
themes/default/templates/blog.html → themes/ваша-тема/templates/blog.html
themes/default/templates/blog-category.html → themes/ваша-тема/templates/blog-category.html
themes/default/templates/blog-post.html → themes/ваша-тема/templates/blog-post.html
themes/default/templates/blog-tag.html → themes/ваша-тема/templates/blog-tag.html
themes/default/templates/partials/blog-card.html → themes/ваша-тема/templates/partials/blog-card.html
Підставляється лише відсутній файл. Власний шаблон завжди головніший, і правки стандартної теми його не зачіпають.
Каркас і сторінки
| Файл | Що малює |
|---|---|
layout.html |
загальний каркас: <head>, шапка, підвал; від нього успадковуються всі сторінки |
home.html |
головна |
category.html |
категорія товарів |
product.html |
картка товару |
page.html |
інформаційна сторінка, створена власником |
search.html |
результати пошуку |
brand.html |
товари одного бренду |
brands.html |
список усіх брендів |
tag.html |
товари за міткою |
tags.html |
список усіх міток |
product-list.html |
добірка товарів окремою сторінкою: /list/адреса-добірки/ |
compare.html |
порівняння товарів |
favorites.html |
обране |
404.html |
сторінку не знайдено |
maintenance.html |
магазин тимчасово зачинено |
Блог
У вітрини може бути кілька блогів, у кожного своя адреса: /news/,
/articles/. Усі вони малюються тими самими шаблонами.
| Файл | Що малює | Адреса |
|---|---|---|
blog.html |
стрічка блогу | /адреса-блогу/ |
blog-category.html |
рубрика блогу | /адреса-блогу/рубрика/ |
blog-post.html |
запис | /адреса-блогу/адреса-запису/ |
blog-tag.html |
записи з міткою | /адреса-блогу/tag/мітка/ |
partials/blog-card.html |
картка запису в стрічці та в блоці «читайте також» | — |
Лічильник прочитань запису веде сам магазин: на сторінці запису він підключає
свій скрипт, а від теми потрібен лише атрибут data-blog-post="{$post.id}" на
елементі статті.
Кошик і оформлення замовлення
| Файл | Що малює |
|---|---|
checkout/cart.html |
кошик |
checkout/layout.html |
оформлення замовлення повністю |
checkout/partials/shipping.html |
список способів доставки |
checkout/partials/payment.html |
список способів оплати |
checkout/success.html |
«замовлення прийнято» |
checkout/error.html |
помилка під час оформлення |
checkout/pay.html |
сторінка оплати замовлення |
checkout/pay-error.html |
помилка оплати |
Оформлення замовлення — одна сторінка. Контакти, доставка, оплата і
підтвердження стоять на ній один під одним, усе це малює checkout/layout.html.
Окремих сторінок-кроків в оформлення немає.
Власник магазину може ввімкнути налаштування «оформлення в один крок» — тоді
кошик і оформлення показуються разом, і значок кошика веде одразу на
оформлення. Окрема сторінка кошика при цьому нікуди не дівається, просто
покупець на неї не потрапляє. Куди вести значок, запитують у магазину:
{$shop->cartPath()}.
У базовій темі поряд лежать файли checkout/delivery.html, checkout/payment.html
і checkout/confirm.html — заготовки, що залишилися від ранньої розробки. Їх ніхто
не підключає, змінювати їх немає сенсу, а у своїй темі їх можна видалити.
Особистий кабінет покупця
| Файл | Що малює |
|---|---|
account/layout.html |
каркас кабінету з меню розділів |
account/login.html |
вхід |
account/register.html |
реєстрація |
account/forgotpassword.html |
відновлення пароля |
account/reset.html |
введення нового пароля |
account/verify.html |
підтвердження пошти |
account/phone.html |
підтвердження телефону |
account/dashboard.html |
огляд кабінету |
account/orders.html |
список замовлень |
account/order.html |
одне замовлення |
account/partials/orders-table.html |
таблиця замовлень, спільна для огляду і списку |
account/profile.html |
профіль покупця |
account/favorites.html |
обране всередині кабінету |
Шматки, які включаються в сторінки
Лежать у partials/ і підключаються тегом {include}.
| Файл | Що малює |
|---|---|
partials/header.html |
шапка сайту |
partials/footer.html |
підвал |
partials/catalog-menu.html |
меню каталогу |
partials/breadcrumbs.html |
хлібні крихти |
partials/product-card.html |
картка товару в списку |
partials/filters.html |
панель фільтрів |
partials/active-filters.html |
чипси обраних умов фільтра |
partials/pagination.html |
посторінкова навігація |
partials/reviews.html |
відгуки про товар |
partials/questions.html |
запитання про товар |
partials/captcha.html |
перевірка «я не робот» |
partials/social-login.html |
кнопки входу через соцмережі |
partials/socials.html |
значки соцмереж і месенджерів |
partials/accessories-popup.html |
вікно «візьміть до цього» після покупки з каталогу |
Блоки головної
Лежать у blocks/ і збираються на головній у потрібному вам порядку.
| Файл | Що малює |
|---|---|
blocks/hero.html |
великий банер |
blocks/hero-slider.html |
слайдер банерів |
blocks/category-tiles.html |
плитки категорій |
blocks/product-list.html |
добірка товарів списком |
blocks/product-slider.html |
добірка товарів каруселлю |
blocks/reviews.html |
останні відгуки |
blocks/news.html |
новини |
blocks/seo-text.html |
текст під товарами |
Шаблони доповнень
Тека templates/plugins/ належить не темі, а доповненням. Коли
власник магазину ставить доповнення, воно кладе туди свої шаблони:
templates/plugins/
promotions/ Акції
web-chat/ Чат на сайті
buy-one-click/ Купити в один клік
…
Ці файли правляться як будь-які інші — вигляд блоку доповнення змінюєте ви. Але в пакет теми вони не потрапляють: у клієнта там будуть його доповнення, а не ваші.
Файли оформлення
assets/
css/ стилі теми
js/ скрипти теми
img/ картинки: логотип, заглушки, значки
vendor/ сторонні бібліотеки, якщо вони потрібні
plugins/ стилі доповнень — як і templates/plugins, не ваші
Усе, що лежить в assets/, магазин віддає браузеру за адресою
/theme-assets/ім'я-теми/…. Усередині шаблону ця адреса завжди є готовою:
<img src="{$theme.assets}/img/logo.svg" alt="">
Файли за межами assets/ браузеру не віддаються. Шаблони, маніфест і
переклади прочитати ззовні не можна — це захист, а не недоробка.
Тексти теми
locale/
ru.json
uk.json
en.json
Звичайні файли виду «ключ — напис», по одному на мову. Подробиці — на сторінці Тексти теми і мови.
Чого в темі немає
Успадкування між темами. Тема самостійна: копія базової теми — це повна копія, а не посилання на неї. Оновлення базової теми вашу тему не зачепить. Єдиний виняток — шаблон сторінки, якого у вашій темі немає зовсім: його магазин бере зі стандартної теми, щоб сторінка не падала (див. вище).
Своїх таблиць у базі. Тема нічого не зберігає, крім власних налаштувань, і ті лежать у вітрини, а не в теми. Тому зміна теми нічого не ламає: повернули попередню — повернулися і її налаштування.
Свого коду на сервері. Якщо потрібна нова поведінка — порахувати щось по-своєму, сходити у зовнішній сервіс, додати розділ вітрини, — це робить доповнення, а не тема. Доповнення при цьому кладе свою розмітку у вашу тему, і ви її оформлюєте.