Шаблоны в хаках отвечают за внешний вид выводимых страниц. Поддерживается работа с самими файлами структуры, их CSS и JS файлами и картинками. В рамках MVC-модели они больше всего похожи на "виды".
Структура файлов стиля
В стилистической части хака доступны четыре папки для файлов. Они управляются соответствующими кнопками раздела "Файлы" в редакторе хаков.
tpl
- "Шаблоны", отвечают за TPL-файлы структуры.css
- "Стили", файлы CSS-стилизации.js
- "Скрипты", файлы JavaScript.img
- "Картинки", изображения для CSS-файлов.
Подключение стилей и скриптов
Для подключения стиля или скрипта, используются из названия без расширения. Если ваш файл называется style.css
, указывайте просто style
, для script.min.js
используйте script.min
.
Добавление скрипта из хака:
$core->hack->(name)->js( $name );
Добавление стиля из хака:
$core->hack->(name)->css( $name );
Добавление системного скрипта:
$core->site->js( $name );
Добавление системного стиля:
$core->site->css( $name );
Добавление готового набора:
$core->site->set( $name )
Среди наборов доступны: jquery
, adminlte
, select2
. Наборы рекомендуется подключать до отрисовки заголовка.
Функции шаблонизатора
Работа шаблонизатора описана в разделе "Шаблоны" документации по дизайну. Управление шаблонами хака осуществляется в разделе "Шаблоны" по кнопке "Файлы".
Шаблон подключается как именованная сущность документа. Чаще всего для основной части используется имя body
, которое мы будем приводить в примерах. Заголовок использует имя header
, подвал имя footer
. Вы можете использовать любое имя для части, с которой будете работать, просто проверьте, чтобы она всегда шла первым параметром в функцию.
Подготовка шаблона к работе:
$core->hack->(name)->tpl( 'body', 'my-template-file' );
Указание основных параметров массивом ключ-значение:
$core->tpl->vars( 'body', [ 'foo' => 'bar', 'peace' => 'deathz' ] );
Добавление блока, параметры - массивом ключ-значение:
$core->tpl->block( 'body', 'blockname', [ 'myvar' => 'myvalue' ] );
Блоки могут иметь вложенное название. Если в блоке one
присутствует блок two
, используйте название через точку: one.two
.
Рендер указанной части и показ её пользователю:
$core->tpl->output( 'body' );
Полезные функции
Эти функции не относятся напрямую к шаблонизатору, но используются для корректного стилистического оформления.
$core->site->header()
Выводит верхнюю часть сайта с меню и навигацией.
$core->site->footer()
Выводит нижнюю часть сайта. После вызова рекомендуется выполнить $core->stop()
для остановки работы.
$core->site->bc( $name, $url = false )
Добавляет в навигационную панель "хлебных крошек" пункт с названием $name
и ссылкой $url
. Если ссылка не указана, указывается просто имя. Последний добавленный элемент используется как заголовок страницы.
$core->site->pt( $title )
Устанавливает заголовок страницы $title
вместо последнего добавленного элемента "хлебных крошек".
$core->u( (string|array) $url, $param = false )
Формирует ссылку по строке или массиву элементов в $url
. При наличии массива или строки $param
, добавляет строку GET-параметров.
Пример реализации
Классическая реализация отображения шаблона выглядит так:
$core->site->bc( $core->lang['proxy_h'], $core->u('proxy-list') ); $core->site->header(); $core->hack->proxy->tpl( 'body', 'proxy-list' ); $core->tpl->vars( 'body', [ 'name' => $core->lang['name'], 'status' => $core->lang['status'], 'noitems' => $core->lang['noitems'], ]); if ( $proxy ) foreach ( $proxy as $p ) { $core->tpl->block( 'body', 'item', [ 'name' => $p['proxy_name'], 'status' => $core->lang['proxy_status'][$p['proxy_status']], ]); } else $core->tpl->block( 'body', 'noitems' ) $core->tpl->output( 'body' ); $core->site->footer(); $core->stop();
Переопределение системных шаблонов
Вы можете подменять системные шаблоны не только в стилях, но и в хаках. Для этого необходимо завести шаблоны с таким же именем, которое используется в системе.
Список переопределенных шаблонов указывается в массиве инициализации с ключом tpl
. В нём должны быть названия файлов шаблонов без расширения.
Например:
return [ /* другие команды инициализации */ 'tpl' => [ 'analytics-main', 'analytics-lead' ] ];