Из чего состоит тема
Полный список файлов и шаблонов: какая страница каким файлом рисуется и что будет, если файла нет.
На этой странице
Тема — это папка с четырьмя частями: манифест, шаблоны, файлы оформления и тексты.
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
Обычные файлы вида «ключ — надпись», по одному на язык. Подробности — на странице Тексты темы и языки.
Чего в теме нет
Наследования между темами. Тема самостоятельна: копия базовой темы — это полная копия, а не ссылка на неё. Обновление базовой темы вашу тему не тронет.
Своих таблиц в базе. Тема ничего не хранит, кроме собственных настроек, и те лежат у витрины, а не у темы. Поэтому смена темы ничего не ломает: вернули прежнюю — вернулись и её настройки.
Своего кода на сервере. Если нужно новое поведение — считать что-то по-своему, сходить во внешний сервис, добавить раздел витрины, — это делает дополнение, а не тема. Дополнение при этом кладёт свою разметку в вашу тему, и вы её оформляете.