Виды на тегах: какие страницы заменить файлом темы
Любую страницу сайта можно заменить файлом тегов без PHP: какие файлы понимает тема, как создать свой 404 и что доступно в видах ядра.
Любой вид сайта (главную, вход, регистрацию, поиск, кабинет, страницу) можно заменить файлом тегов. Это обычная HTML-разметка, в которую вставляются теги {имя}, условия [if:имя]…[/if] и повторы [each:список]…[/each] (общий язык тегов, тот же, что в «Новости → Шаблоны записей»). Это безопасный аналог файлов шаблонов в других движках: в файле тегов нельзя написать PHP. Рамку страницы (шапку, меню, колонку, подвал) описывает статья «Главный шаблон сайта на тегах», общие теги любой страницы — там же.
Как включить
В вашей теме положите файл по пути вида с окончанием .tpl.html вместо .php:
| Что заменяете | Файл в теме |
|---|---|
| главная разметка (шапка, места, содержимое, подвал) | themes/ИМЯ/views/layouts/main.tpl.html |
| страница сайта | themes/ИМЯ/views/pages/show.tpl.html |
| вход | themes/ИМЯ/views/auth/login.tpl.html |
| регистрация, восстановление пароля, сброс, второй фактор, подтверждение почты, правила | auth/register.tpl.html, auth/forgot.tpl.html, auth/reset.tpl.html, auth/two-factor.tpl.html, auth/verify.tpl.html, auth/rules.tpl.html |
| поиск | search.tpl.html |
| кабинет, безопасность, сеансы, приватность | auth/profile.tpl.html, auth/profile-security.tpl.html, auth/profile-sessions.tpl.html, auth/profile-privacy.tpl.html |
| публичный профиль | auth/public-profile.tpl.html |
Свой 404 и любая страница файлом темы
Положите themes/ТЕМА/views/errors/404.tpl.html (или создайте его командой theme:file, см. ниже), впишите разметку с тегами {status}, {message}, {search}, {home} — и страница 404 станет вашей. Так же заменяется любой файл из списка: подвал partials/footer.tpl.html, боковая колонка partials/sidebar.tpl.html, полная новость news/show.tpl.html.
Какие файлы можно заменить и как их создать
Полный список файлов, которые тема может заменить своими (сейчас 58: каркас, шапка, подвал, боковая колонка, карточка, новости, комментарии, сообщения, форум, магазин, события, галерея, опросы, поиск, вход, кабинет, страницы ошибок), покажет команда:
php nex1on theme:files my-site«есть» — файл уже лежит в вашей теме, «—» — страницу рисует движок. Чтобы начать с готового, создайте файл из заготовки (имя можно писать как errors/404, errors-404, news::show или полным путём):
php nex1on theme:file my-site errors/404Файл появится в themes/my-site/views/errors/404.tpl.html с тегами по умолчанию: правьте его в любом редакторе, страница подхватит изменения сразу, без админки. Существующий файл команда не затирает (--force — перезаписать).
Нет файла тегов или он сломан (например, не закрыт блок) — работает обычный вид, страница не ломается. Файл тегов в общей папке темы главнее вида модуля, как и PHP-файл.
Данные вида: условия и повторы
Кроме общих тегов в файле доступны данные, которые вид получил от движка: {имя}, {a.b}, [each:список] с {item}, {item.ключ}, {index}, условия [if:имя], [if:имя=значение], [ifnot:имя], опция limit=N. Секретное (ключи защиты форм, пароли, токены, сеансы) и объекты через теги не отдаются.
Виды ядра на тегах
| Вид | Что доступно (кроме общих тегов) |
|---|---|
auth/login | {form} — готовая форма входа; слова {t.eyebrow}, {t.title}, {t.lead}, {t.forgot}, {t.no_account}, {t.submit} и другие; {forgot_url}, {register_url}; условие [if:can_register] |
auth/register | {form}, слова {t.…} (приставка auth.register), {forgot_url} |
auth/forgot, auth/reset, auth/two-factor, auth/verify, auth/rules | у каждого {form} и слова {t.…} (приставки auth.forgot, auth.reset, auth.2fa, auth.verify, auth.rules) |
search | {form} (строка поиска), {query}, [each:results] ({item.title}, {item.url}, {item.excerpt}…), [each:popular], {found.*}, [if:tooShort], {minimum}, слова {t.…} (search.*) |
auth/profile, auth/profile-security, auth/profile-sessions, auth/profile-privacy | {form} (и {form:2}, {form:3} — остальные формы вида по порядку), {identity} (шапка кабинета), {profile_nav} (меню кабинета), слова {t.…} (profile.*) |
auth/public-profile | {identity} и данные профиля |
pages/show | {title}, {page.title}, {page.excerpt}, {page.body} (текст страницы, разметка движка), {cover}, [each:trail], [each:children], [each:siblings] |