Шаблоны и стилизация

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