Шаблоны в хаках отвечают за внешний вид выводимых страниц. Поддерживается работа с самими файлами структуры, их 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' ] ];