Шаблоны внутри стилей отвечают за HTML-составляющую того, что будет выводиться пользователю. Вы можете выбрать шаблон интересующей вас страницы и внести в него любые изменения.
Управление шаблонами
Работа с шаблонами выполняется из вкладки "Шаблоны" вашего стиля. В этом разделе можно добавлять системные файлы шаблонов в свой стиль и изменять их по своему усмотрению. Если файл какого-либо шаблона присутствует в стиле, система будет использовать именно его, а не системную версию.
- Для добавления шаблона в свой стиль, найдите его в списке и нажмите кнопку "Добавить".
- Редактирование шаблона выполняется по кнопке "Правка" через встроенный редактор.
- Вы можете скачать шаблон, кликнув по его названию, поменять содержимое и загрузить вручную через FTP в папку
tpl
вашего стиля. - Вы также можете добавить шаблон с произвольным названием для использования в собственных модулях.
Наиболее полезные шаблоны, которые пригодятся вам в работе:
home
- лендинг на главной странице.login
- форма входа, регистрации и восстановления пароляheader
- заголовочная часть сайта, включая верхнее и боковое меню.footer
- подвал сайта с копирайтом JS-кодом.
Мы рекомендуем даже не влезать в другие шаблоны и ограничиться изменением этих. Оставьте внутреннюю часть сайта в покое простой сменой названий классов через макросы. В противном случае вам придётся сверять изменения в своих и системных шаблонах при выходе каждой новой сборки. Новые сборки появляются от одного раза в несколько дней до нескольких раз в течение одного дня.
Синтаксис шаблонизатора
Встроенный шаблонизатор чем-то напоминает Smarty, в основе его идеи лежит система шаблонов phpBB2. Шаблонизатор поддерживает вставку переменных, повторяющихся блоков и условных блоков.
Вставка обычной переменной:
{myvar}
Вставка макроса:
{tpl:macroname}
Вставка повторяющихся блоков выполняется с помощью <!-- BEGIN xxx --> в начале блока и <!-- END xxx --> в конце. Вставка переменных внутри блока производится через точку: {xxx.yyy}. Если используются вложенные блоки, необходимо указать всю цепочку блоков в переменной: {xxx.yyy.zzz.aaa}.
<!-- BEGIN offer --> {offer.name} <!-- BEGIN goal --> {offer.goal.name} <!-- END goal --> {offer.description} <!-- END offer -->
В шаблоне также можно применять условные операторы. Они всегда проверяют значение только одной переменной, делать комплексные условия нельзя. Вставка условного блока производится с помощью <!-- IFSET xxx -->
в начале блока и <!-- ENDIF -->
в конце, блок <!-- ELSE -->
также предусмотрен. Доступно несколько условных операторов.
IFSET xxx
- если значениеxxx
истинноIFNOT xxx
- если значениеxxx
ложноELSE
- в ином случаеELSEIF xxx
илиELIF xxx
- в ином случае еслиxxx
истинноELSEIFNOT xxx
илиELNO xxx
- в ином случае еслиxxx
истинноIFTPL xxx
- если макросxxx
истинныйIFNTP xxx
- если макросxxx
ложный
Примеры условных операторов:
<!-- IFSET hasnews --> {newstext} <!-- ELSE --> {nonewshere} <!-- ENDIF -->
Полезные макросы
При работе с шаблонами, вам будет удобно указывать пути к ресурсам с помощью макросов. Так эти пути будут актуальными при переносе стиля в другую папку.
{tpl:skin}
- папка стиля, напримерmystyle
.{tpl:skinpath}
- путь к стилю, например/skin/mystyle
, без слеша в конце.{tpl:skincss}
- путь к CSS-файлам, например/skin/mystyle/css
, без слеша в конце.{tpl:skinjs}
- путь к JS-файлам, например/skin/mystyle/js
, без слеша в конце.{tpl:skinimg}
- путь к картинкам, например/skin/mystyle/img
, без слеша в конце.
Подключение шаблонов в коде
Если вы создаёте свой модуль, для работы с шаблонами вам потребуется несколько простых команд.
Шаблон подключается как именованная сущность документа. Чаще всего для основной части используется имя body
, которое мы будем приводить в примерах. Заголовок использует имя header
, подвал имя footer
. Вы можете использовать любое имя для части, с которой будете работать, просто проверьте, чтобы она всегда шла первым параметром в функцию.
Подготовка шаблона к работе:
$core->skin->load( 'body', 'my-template-file' );
Указание основных параметров массивом ключ-значение:
$core->tpl->vars( 'body', [ 'foo' => 'bar', 'peace' => 'deathz' ] );
Добавление блока, параметры - массивом ключ-значение:
$core->tpl->block( 'body', 'blockname', [ 'myvar' => 'myvalue' ] );
Рендер указанной части:
$core->tpl->output( 'body' );
Делаем закат солнца вручную
Шаблоны из TPL-файлов преобразуются в чистый PHP-код. В теории, вы можете использовать PHP в исходных шаблонах, и он даже будет работать. Мы не рекомендуем этого делать, но не запрещаем вам наслаждаться процессом.
Вставка переменной {myvar}
после рендеринга выглядит вот так:
<$= $_data['myvar']; ?>
Вы можете обращаться напрямую к $_data['myvar']
в любом участке кода, данная переменная активна и определена везде в рамках шаблона.
Вставка блочной переменной {blockname.myvar}
после рендеринга выглядит вот так:
<$= $blockname['myvar']; ?>
Вы можете обращаться к переменной $blockname['myvar']
только внутри указанного блока, она не определена за его пределами.
Массив $_data
содержит в себе все данные шаблонизатора, в том числе и вложенные блоки. Ключи основных переменных соответствуют их названиям в шаблоне, ключи блоков содержат в конце точку.
$_data = [ 'myvar' => 'foo', 'blockname.' => [ 'myvar' => 'bar', 'nestedblock.' => [ 'onemore' => 'variable' ] ] ];
Ручная реализация шаблонов не рекомендуется. Но выглядит заманчиво.