bendasvadim

Собственные модификаторы Fenom

Использоватние

{$variable | snippet}

Сниппет «snippet»

<?php
/** @var modX $modx */
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        /** @var Fenom $fenom
            Мы получаем переменную $fenom при его первой инициализации и можем вызывать его методы. 
            Например, добавим модификатор вывода имени домена сайта из произвольной ссылки.
        */
        $fenom->addModifier('website', function ($input) {
            if (!$url = parse_url($input)) {
                return $input;
            }
            $output = str_replace('www.', '', $url['host']);

            return strtolower($output);
        });
        break;
}

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

switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        $Extras = $modx->getService('Extras', 'Extras', MODX_CORE_PATH . 'components/extras/model/');
        if ($Extras) {
            /** @var Fenom $fenom */
            $Extras->addFenomModifies($fenom);
        }
    break;
}
08 февраля 2018, 18:06    bendasvadim MODX Revolution 0    1352 0

Комментарии ()

  1. Александр Туманов 21 августа 2019, 15:01 # 0
    Как такие модификаторы хранить в файловой системе без штатной статики? Можно как-то подтягивать саму логику модификатора в плагин из файла?
    $fenom->addModifier('website', function ($input) {
    	// логика модификатора..	
    });
    
    1. Вадим Бендас 30 августа 2019, 15:13(Комментарий был изменён) # 0
      Может я не правильно понял. Но можно плагин сделать статичным. Если не хочешь хранить код в плагине и разбить каждый модификатор в отдельном файле но при этом иметь только один плагин то можно черехз include подставлять код с разных файлов
      $fenom->addModifier('website', function ($input) {
      	include 'file.php';
      });