Блог ⁄ MODx ⁄ Плагин PHx, настройка и работа
Процесс установки PHx для MODx 1.0.5 Evo прост. Во-первых, качаем архив с плагином PHx с официального сайта. Во-вторых, скачиваем пропатченную версию файла phx.parser.class.inc.php с сайта MODx-сообщества. Дело в том, что для текущей версии (на момент написания актуальна версия 2.1.4) характерны такие недостатки, как вырезание плэйсхолдеров от других сниппетов и медленная работа с множественными обращениями к БД. Версия от Антона Кузьмина лишена этих недоработок. Заменяем в официальной сборке файл phx.parser.class.inc.php на скачанный.
На сайте создаём в директории /assets/plugins/ папку phx. Заливаем сюда обновлённый PHx.

Теперь заходим в админку и создаём плагин с названием PHx.
В поле «Код плагина» копируем содержимое файла phx.plugin.txt. После чего кликаем на вкладке системные события, чтобы назначить запуск плагина на событие OnParseDocument.
Плагин установлен. Теперь самое интересное — использование (рекомендую почитать мануал, довольно путёво написано). Иногда бывает так, что формат сайта не позволяет использовать в определённых местах длинные словосочетания или предложения. На изображении ниже слева показано место, где стандартный заголовок не уместился из-за длинного слова «увеличивает», при помощи PHx в этом месте на сайте был выведен плэйсхолдер menutitle вместо pagetitle. Соответственно длинное слово было употреблено с переносом: «увеличива- ет».
Реализовано это с помощью следующей строки кода:
<h3><a href="/[~[+id+]~]">
[+phx:if=`[+menutitle+]`:ne=``:then=`[+menutitle+]`:else=`[+pagetitle+]`+]
</a></h3>
Что впрочем можно было записать короче:
<h3><a href="/[~[+id+]~]">
[+menutitle:ne=``:else=`[+pagetitle+]`+]
</a></h3>
Проблемы PHx
Первая проблема — это обрубание чужих плэйсхолдеров. При использовании Ditto, вызывайте его в кэшируемом виде (т.е. так: [[Ditto? &startId= ]] ), а у страницы с вызовом снимите галочку «Кэшируемый».

Это самая частая причина того, что пагинация не отображается при совместном использовании Ditto и PHx. При этом на странице вовсе не обязательно присутствовать вызову PHx, как мы помним он вызывается на событие OnParseDocument для всех страниц, поэтому плэйсхолдеры могут вырезаться везде.
Вторая наиболее частая проблема, это когда подстановка плэйсхолдера PHx не срабатывает — вместо плэйсхолдера ничего не появляется, вообще. В отличие от вызовов сниппетов, в плэйсхолдерах недопустим пробел перед закрывающей конструкцией +].
[+menutitle:ne=``:else=`[+pagetitle+]` +] — этот плэйсхолдер не сработает
[+menutitle:ne=``:else=`[+pagetitle+]`+] — а этот — сработает
Пока что всё, будьте успешными! :)



