Блоки дополнения

Цель применения

Блоки являются рекомендуемой альтернативой применению модификаторов. Цель использования блоков - удобная интеграция HTML блоков дополнений в файлы шаблоны тем или модулей посредством специальных комментариев (тегов).
Тег - это комментарий, содержащий необходимые для блока дополнения параметры локальных переменных шаблона в виде JSON-строки, идентифицирующийся по названию дополнения и ключу блока имеющего следующий вид:

<!-- [extension_p0bc5sa_block1{"param1":"<?= $id ?>"}] -->

Примером применения может быть отображение статуса пользователя online на страницах, где отображается информация о пользователе.

Настройки блоков дополнения

В настройках дополнения блоки будут доступны в разделе "Инструкция / Блоки". Блоки будут добавлены нумерованным списком, содержащим информацию о названии блока, его описании, код для вставки, а также инструкцию где в файле шаблоне данный код рекомендуется добавить. Зелёным будут помечены файлы шаблона, в которых блоки были найдены. Также есть кнопка "Обновить" для проверки наличия комментариев (тегов) в необходимых файлах шаблонах.

Пример разработки блока

Блоки объявляются в методе init() дополнения сразу после добавления настроек и вызова метода $this->configSettings(), путем вызова метода дополнения blockAdd. Далее устанавливаются параметы блока, посредством вызова вспомогательных методов возвращаемого объекта класса ExtensionBlock. Пример объявления блока:

$this->blockAdd('block1', function($params){
    // Функция обработчик формирующая HTML блока
    return 'HTML';
})
// Название блока можно использовать для краткого описания места на странице
// Например: Профиль пользователя, блок пользователя.
->title($this->langAdmin('Заголовок блока'))
// Указываем файл шаблона приложения в котором следует добавить код блока
// Если файлов несколько, данных вызовов может быть также несколько
->template('/modules/users/tpl/def/profile.php')
// Указываем дополнительные параметры блока (доступные в виде переменных в файле шаблона)
->param('param1', '?$id')
->param('param2', '?$user_id')
// Описываем точное место в файле
// Поддерживается Markdown разметка, в частности однострочный и многострочный код
->integration($this->langAdmin('Подробное описание места интеграции ...'))
// Указываем описание блока
// Также поддерживается Markdown разметка
->description($this->langAdmin('Описание блока'));
$this->blockAdd('block2', array($this, 'blockMethod')) // Метод дополнения
 ->title($this->langAdmin('Заголовок блока №2'))
 ->template('/modules/shops/tpl/def/view.php')
 ->param('shop', '?$shop_id')
 ->description($this->langAdmin('Описание блока №2'));

Опишем подробнее аргументы метода blockAdd('block_key', callable $callback):

  • block_key - ID блока (уникальный ключ в рамках дополнения), допустимые символы: a-z,A-Z,0-9,-,_
  • callback - функция обработчик, отвечающая за отрисовку блока, может быть объявлена непосредственно в самом блоке или публичным методом дополнения.
    Пример подобного метода:
/**
 * Пример метода формирующего HTML код блока дополнения
 * @param array $params параметры блока (указанные при объявлении блока): 'param1', 'param2', ...
 * @return string HTML (или пустая строка)
 */
public function blockMethod($params)
{
    // Формируем HTML шаблон путем подключения файла шаблона дополнения /tpl/template.php
    return $this->view($params, 'template');
}

Параметрами метода $params являются параметры передаваемые в теге посредством JSON-строки. В местах вставки как правило есть данные в виде локальных переменных, которые и необходимы для отрисовки блока на странице. Тег вставляется непосредственно в файл шаблона, объявленный при инициализации блока.

Для того чтобы избежать ошибки в случае отсутствия переменной в файле шаблона при объявлении параметров используется специальный синтаксис, а именно знак ? перед её названием:

param('shop', '?$shop_id')

Таким образом в результирующем коде тега переменная будет иметь следующий вид:

<!-- [extension_p0bc5sa_block1{"shop":"<?= isset($shop_id) ? $shop_id : '' ?>"}] -->