#Как устроены шаблоны
Шаблон (тема) — это вёрстка сайта, упакованная так, чтобы её можно было поставить кнопкой. Тема не содержит кода: она описывает, как выглядят модули, и какие настройки нужны её разметке.
#Состав архива
moya-tema.zip
theme.json обязателен
demo.json необязателен — примеры содержимого
preview.png картинка для карточки в панели
assets/style.css стили
assets/script.js скрипты
packages/ своё решение темы, если нужноМожно паковать и папкой внутри (moya-tema/theme.json) — найдётся.
Кода в теме быть не должно. Файлы .php, .phtml, .sh,
.htaccess и подобные отклоняются с объяснением: тема — это вёрстка, а
чужой код на сайте означает чужой код на сайте. Пределы: 64 МБ
распакованного, 2000 файлов.
#theme.json
{
"code": "moya-tema",
"name": "Моя тема",
"version": "1.0.0",
"author": "Студия",
"requires_packages": ["block", "portfolio", "form"],
"settings": [
{ "name": "phone", "title": "Телефон", "type": "phone" }
],
"views": [
{ "module": "portfolio", "code": "moya.portfolio",
"html": "<div class=\"grid\">{item}</div>",
"item_html": "<article>{module.portfolio.zagolovok}</article>" }
]
}| Ключ | Что задаёт |
|---|---|
code | имя темы: латиница, цифры, дефис, с буквы |
version | ровно три числа. Не вырастили — обновление не предложится |
requires_packages | решения, на которых держится вёрстка |
bundled_packages | своё решение, привезённое темой |
settings | поля, которые появятся в «Настройки сайта» |
views | вёрстка модулей — главное в теме |
#Три страницы про темы
- Виды в теме — как описывается вёрстка модуля.
- Настройки и демо-данные —
settingsиdemo.json. - Своё решение темы — когда вёрстки мало и нужен свой справочник.
#requires_packages — решения, на которых стоит тема
Перечислите здесь всё, чьи модули использует вёрстка. При установке система сама:
- поставит недостающие решения — в облаке они входят в тариф;
- включит те, что стоят, но выключены — иначе их справочники спрятаны, слушатели молчат, и блоки темы окажутся пустыми;
- и только потом уложит виды.
Забыть решение в этом списке — самая частая причина «тема встала, а блок пустой»: вёрстка ссылается на модуль, которого на сайте нет.
#Что проверяется по форме
| Что | Правило | Пример |
|---|---|---|
| код темы | латиница, цифры, дефис; с буквы | moya-tema |
| версия | ровно три числа | 1.0.0 |
| код вида | латиница, цифры, точка, дефис, подчёркивание; заглавные можно | moya.menuItem |
| модуль у вида | непустая строка | portfolio |
| код решения | латиница, цифры, дефис; точка нельзя | moya-blog |
| решение темы | начинается с кода темы и дефиса | moya-tema-portfolio |
core_version | ограничение со знаком | >=1.0.0 |
| пути файлов | латиница, цифры, точка, дефис, подчёркивание | assets/style.css |
| имя настройки | не id и не domain — они служебные | site_url |
Про заглавные в коде вида отдельно: они законны и нужны. Код обычно
повторяет имя модуля, а среди модулей есть menuItem. Правило,
запрещающее заглавные, отвергло бы и его.
#Счётчики и чужой код в шапке
В голове документа положено оставить два места:
{before_head_close_code}
</head>
<body>
{after_body_open_code}Сюда владелец кладёт из панели Метрику, GTM, пиксель, код верификации
поисковика — что угодно и сколько угодно. Поля называются по месту
вставки, а не по имени счётчика: вёрстка знает только «перед
</head>» и «сразу после <body>».
Старые метки {yandex_metrika}, {google_tag_head}, {google_tag_body}
отменены. Их значения лежали в файле настроек, куда владелец сайта не
дотягивается, а третьему счётчику места не было вовсе. Оставшаяся в теме
такая метка просто вычистится.
При замере скорости (Lighthouse) содержимое обоих полей не выводится: иначе оценка говорила бы о расторопности чужих серверов, а не о вашей вёрстке.
#Как проверить готовую тему
Соберите zip, загрузите через Шаблоны → Загрузить тему из архива, нажмите Применить. Не хватает решения, справочника или поля — установка скажет, чего именно, и не сделает половину работы.
#Что чаще всего идёт не так
«Тема встала, а блок пустой». Решение, чей модуль зовёт вёрстка, не
перечислено в requires_packages и потому не установлено.
«Метки в карточках не подставились». В item_html написано
{item.поле} — такой формы в движке нет. Правильно
{module.имя_модуля.поле}.
«Текст страниц пропал». В виде модуля page нет метки
{module.page.content}.
«Обновил тему — на сайте старая вёрстка». Виды, которые владелец правил, обновление не трогает: новая вёрстка легла в «исходный код». Нужно нажать «Вернуть исходный код» у нужного вида.
«Настройка не читается». Имя настройки id или domain — они
служебные. Возьмите другое: для адреса сайта site_url.
«Архив не загружается». Внутри есть файлы с кодом, кириллические
имена файлов, нет theme.json или версия записана не тремя числами.