З чого складається тема
Повний список файлів і шаблонів: яка сторінка яким файлом малюється і що буде, якщо файлу немає.
На цій сторінці
Тема — це тека з чотирма частинами: маніфест, шаблони, файли оформлення і тексти.
themes/ваша-тема/
theme.json маніфест: ім'я, версія та налаштування теми
templates/ шаблони сторінок
assets/ css, js, картинки, шрифти
locale/ написи теми: ru.json, uk.json, en.json
Магазин вважає теку темою, тільки якщо в ній лежить theme.json. Усе
інше необов'язкове — тема без жодної картинки і без жодного перекладу
працює.
Шаблони
Ім'я файлу сторінки — це ще й назва розділу вітрини: воно приходить у шаблон
змінною $action (у головної — default). За нею зручно підсвічувати
активний пункт меню.
Якщо файлу сторінки немає, сторінка не відкриється. Магазин не підставляє шаблон із базової теми замість відсутнього: успадкування між темами немає навмисно, інакше тема починала б залежати від чужих правок. Копія базової теми отримує одразу всі файли, і зайві можна спокійно видалити тільки разом із розділом, який вони малюють.
Каркас і сторінки
| Файл | Що малює |
|---|---|
layout.html |
загальний каркас: <head>, шапка, підвал; від нього успадковуються всі сторінки |
home.html |
головна |
category.html |
категорія товарів |
product.html |
картка товару |
page.html |
інформаційна сторінка, створена власником |
search.html |
результати пошуку |
brand.html |
товари одного бренду |
brands.html |
список усіх брендів |
tag.html |
товари за міткою |
tags.html |
список усіх міток |
compare.html |
порівняння товарів |
favorites.html |
обране |
404.html |
сторінку не знайдено |
maintenance.html |
магазин тимчасово зачинено |
Кошик і оформлення замовлення
| Файл | Що малює |
|---|---|
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
Звичайні файли виду «ключ — напис», по одному на мову. Подробиці — на сторінці Тексти теми і мови.
Чого в темі немає
Успадкування між темами. Тема самостійна: копія базової теми — це повна копія, а не посилання на неї. Оновлення базової теми вашу тему не зачепить.
Своїх таблиць у базі. Тема нічого не зберігає, крім власних налаштувань, і ті лежать у вітрини, а не в теми. Тому зміна теми нічого не ламає: повернули попередню — повернулися і її налаштування.
Свого коду на сервері. Якщо потрібна нова поведінка — порахувати щось по-своєму, сходити у зовнішній сервіс, додати розділ вітрини, — це робить доповнення, а не тема. Доповнення при цьому кладе свою розмітку у вашу тему, і ви її оформлюєте.