Сладкий синтаксис в Fenom
На просторах сообщества уже много раз поднималась тема расширяемости синтаксиса Fenom. В pdoTools для этого есть даже событие плагина pdoToolsOnFenomInit. В этой заметке предлагаю добавить некий синтаксический сахар для ещё более приятного использования классного шаблонизатора. Мы добавим подключение файлового чанка в шаблон таким образом
{chunk 'path/to/chunk'}
и вызов сниппета таким {snippet 'pdoResources' ['param' => 'value']}
Плагин
Вешаем плагин на событие pdoToolsOnFenomInit
<?php
$pdoTools = $modx->getService('pdoTools');
// usage: {chunk 'path/to/chunk' ['param' => 'value']}
$fenom->addFunction('chunk', function (array $data) use ($pdoTools) {
$name = '@FILE chunks/' . $data[0] . '.tpl';
$properties = empty($data[1]) ? [] : $data[1];
$pdoTools->debugParserModifier($name, 'chunk', $properties);
$result = $pdoTools->getChunk($name, $properties);
$pdoTools->debugParserModifier($name, 'chunk', $properties);
return $result;
});
// usage: {snippet 'pdoResources' ['param' => 'value']}
$fenom->addFunction('snippet', function (array $data) use ($pdoTools) {
$name = $data[0];
$properties = empty($data[1]) ? [] : $data[1];
$pdoTools->debugParserModifier($name, 'snippet', $properties);
$result = $pdoTools->runSnippet($name, $properties);
$pdoTools->debugParserModifier($name, 'snippet', $properties);
return $result;
});
Как использовать
Создаём файл в core/elements/chunks/content/base.tpl с кодом чанка. Вызываем так:
{chunk 'content/base'}
Как видите, здесь только часть пути. Без chunks/ и расширения.Как это работает
Для чанков, подключаемых таким способом, нужно соблюдать 2 условия. Они должны
1) Быть файловыми и лежать в /core/elements/chunks/
2) Иметь расширение .tpl
Со сниппетами думаю итак всё понятно.
Итого
Достаточно просто, не так ли? Таким образом можно добавить, что угодно! Например, у меня помимо этих кастомных функций, есть ещё несколько, которые я использую почти на всех сайтах. Дерзайте!
Поблагодарить автора
Отправить деньги
Комментарии: 1
По-моему, это даже не полусладкое, а полусухое. Ну для чанков, допустим, подсластитель в том, чтобы не писать папку «chunk» и разширение «tpl». А для сниппета где он? Профит в том, чтобы не писать палку и двоеточие?
2. Тут да. Так как nul байт пофиксили в 5.3.
// pdoTools
{'pdoResources' | snippet : ['param' => 'value']}
// Твой вариант
{snippet 'pdoResources' ['param' => 'value']}
Кроме того возможна путаница (для стороннего разработчика) — chunk вызывает файловый чанк, а snippet — обычный сниппет.Для чанков, подключаемых таким способом, нужно соблюдать 2 условия. Они должны1. Необязательно. Так как ты сломал механизм pdoTools, то можно указать любой путь.
1) Быть файловыми и лежать в /core/elements/chunks/
2) Иметь расширение .tpl
2. Тут да. Так как nul байт пофиксили в 5.3.
Дерзайте!Спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.