Использование модификаторов Fenom в PHP
Заметка коротенькая, но может быть полезной.
Все знают, что мы можем добавлять собственные модификаторы Fenom на событие pdoToolsOnFenomInit. А как быть, если мы хотим потом использовать этот же модификатор не в чанках и шаблонах, а в своих PHP скриптах?
А очень просто:
Таким образом можно получить любой нужный модификатор и использовать один и тот же код и в чанках, и скриптах. Нет дублирования функционала, нет возможных проблем из-за этого.
Надеюсь, кому-нибудь пригодится.
Все знают, что мы можем добавлять собственные модификаторы Fenom на событие pdoToolsOnFenomInit. А как быть, если мы хотим потом использовать этот же модификатор не в чанках и шаблонах, а в своих PHP скриптах?
А очень просто:
$pdoTools = $modx->getService('pdoTools');
$string = 'Some very very long string';
if ($truncate = $pdoTools->getFenom()->getModifier('truncate')) {
$string = $truncate($string, 10);
}
return $string;
Здесь мы получаем модификатор truncate и обрезаем строку до 10 символов, если она больше.Таким образом можно получить любой нужный модификатор и использовать один и тот же код и в чанках, и скриптах. Нет дублирования функционала, нет возможных проблем из-за этого.
Надеюсь, кому-нибудь пригодится.
Комментарии: 5
Такой вопрос: а использование модификаторов fenom, как-то увеличивает производительность?
— Сниппеты бывают совсем небольшие и создавать их на каждый чих не хочется
— Вызов сниппета, это всё-таки дополнительная нагрузка
Да, конечно.
Более того, Fenom работает быстрее даже учитывая все оптимизации по вызову модификаторов в pdoTools. Для проверки я доработал старый тест:
При обычном вызове, обрабатываемом pdoParser:
Вызов через Fenom:
Один и тот же код, один и тот же модификатор — а разница больше секунды.
Более того, Fenom работает быстрее даже учитывая все оптимизации по вызову модификаторов в pdoTools. Для проверки я доработал старый тест:
<?php
define('MODX_API_MODE', true);
require 'index.php';
$pdo = $modx->getService('pdoTools');
$tpl = '@INLINE <p>[[+val1:jevix]] - [[+val2:jevix]] - [[+val3:jevix]]</p>';
//$tpl = '@INLINE <p>{$val1 | jevix} - {$val2 | jevix} - {$val3 | jevix}</p>';
$output = '';
for ($i = 0; $i <= 1000; $i ++) {
$array = array(
'val1' => 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.',
'val2' => 'Lorem Ipsum has been the industry`s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.',
'val3' => 'It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.'
);
$output .= $pdo->getChunk($tpl, $array);
}
echo '<pre>'; print_r($pdo->getTime()); echo '</pre>';
В чанках вызывается типограф Jevix, по 3 раза * 1000 прогонов чанка. При обычном вызове, обрабатываемом pdoParser:
0.0003281: Created inline "modChunk" with name "bbdcd0fbc032e01d5a33c9913b2191c5" 4.6010261: Total time 2 097 152: Memory usage
Вызов через Fenom:
0.0002620: Created inline "modChunk" with name "6a8737a398ea1d3a6fa0286bba190054" 0.0039191: Compiled Fenom chunk with name "modchunk/6a8737a398ea1d3a6fa0286bba190054" 0.0020549: Loaded "modSnippet" with name "jevix" 3.4489100: Total time 10 485 760: Memory usage
Один и тот же код, один и тот же модификатор — а разница больше секунды.
А если включить кеширование fenom, ещё быстрей будет работать?
Нет
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.