Сегодня отправил Pull request для MODX, добавляющий в класс ресурса возможность парсить себя. Давно хотел это сделать, но оценивал вероятность его принятия как невысокую. Да ещё и тот факт, что я перешёл на Laravel, никак не повышал мотивацию. Но сегодня во мне проснулся альтруист, и я решил таки запулить такую функциональность в MODX. Ну ещё вероятность принятия увеличивается с появлением в команде разработчиков Василия Наумкина (aka bezumkin).

Доработка коснулась двух классов modResource и modResponse. В класс ресурса я добавил пару методов, самым интересным из которых является метод parseContent(), благодаря которому ресурс получил возможность себя парсить. Это может пригодиться при Ajax запросах:

$resource = $modx->getObject('modResource', $id);
$content = $resource->parseContent();

В метод можно передать массив плейсхолдеров, также как мы передаём их для парсинга чанка.

Доработка класса modResponse с первого взгляда кажется неважной. Я убрал из метода outputContent() функционал парсинга ресурса. С точки зрения SOLID принципа негоже класс ответа нагружать ещё логикой, относящейся к ресурсу. Вы скажите: «Ну и что»? А то, что это открывает большие возможности.

Представьте, что теперь можно создать свой CRC, который изменяет функционал парсинга. Например, можно вообще отказаться от парсера MODX и полностью перейти на Fenom или любой другой шаблонизатор. Мечта разработчиков на фреймворках. Для этого достаточно изменить метод parseContent(). Тройной вызов метода $parser->processElementTags(), который нарушает логику Fenom, можно заменить вызовом $parser->pdoTools->fenom(). И шаблонизатор работает как положено. Звучит интересно?

Можно пойти на компромисс и оставить парсер MODX для кэшированных элементов, а Fenom для некэшированных, таким образом получая преимущества от использования обоих парсеров. В этих режимах их зона ответственности пересекается минимально.

Ещё вместо шаблонов из БД можно подгружать файловые шаблоны.

Если вы считаете данную доработку полезной, то оставьте свой голос на странице Pull request.

П.С. Как создавать кастомный класс ресурса описано в документации. Там целых 4 шага. Но это можно сделать гораздо проще. Если данный PR будет принят, то я напишу небольшую заметку об этом.

23 апреля 2018, 18:10   763     2

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

  1. Семён 23 апреля 2018, 20:18 # +1
    Отличные плюшки, в прочем, как всегда)
    Я уже поставил палец вверх в пулреквест, будем надеяться что примут.
    1. Сергей Шлоков 23 апреля 2018, 21:13 # +1
      Марк уже отписался, что примут, но только в 3-ей версии.

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.