Шаблоны внутри стилей отвечают за 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'
   ]
 ]
];

Ручная реализация шаблонов не рекомендуется. Но выглядит заманчиво.