Использование модификаторов Fenom в 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 символов, если она больше.

Таким образом можно получить любой нужный модификатор и использовать один и тот же код и в чанках, и скриптах. Нет дублирования функционала, нет возможных проблем из-за этого.

Надеюсь, кому-нибудь пригодится.
Василий Наумкин
20 августа 2017, 11:10
modx.pro
13
3 273
+10

Комментарии: 5

Юрий
20 августа 2017, 14:50
0
Такой вопрос: а использование модификаторов fenom, как-то увеличивает производительность?
    Максим Кузнецов
    20 августа 2017, 19:50
    0
    — Сниппеты бывают совсем небольшие и создавать их на каждый чих не хочется
    — Вызов сниппета, это всё-таки дополнительная нагрузка
      Василий Наумкин
      21 августа 2017, 11:17
      0
      Да, конечно.

      Более того, 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

      Один и тот же код, один и тот же модификатор — а разница больше секунды.
        Юрий
        02 сентября 2017, 11:26
        0
        А если включить кеширование fenom, ещё быстрей будет работать?
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    5