Воскресенье, 14 августа 2011 13:38

Вырезание плейсхолдеров ModX PHx’ом

В ModX есть очень удобная штука – можно в своих снипетах самому устанавливать плейсхолдеры. Однако, при использовании PHx сталкиваешься с тем, что ничего не работает. Проблема проста – PHx считает, что ваши плейсхолдеры в шаблоне – просто мусор, и вырезает их.

На данный момент нашел 2 способа решения данной проблемы. Каждый из них имеет свои плюсы и минусы.

1. Способ, более сложный, создающий доп. нагрузку на систему, но при этом наиболее безопасный, т.к. в PHx не вносится никаких изменений.

Суть его в том, что отображаем плейсхолдер через снипет.

Создаем снипет, например showPH:

<?php 
   if(!isset($name)) $name = ''; 
   echo $modx->getPlaceholder($name);
?>

А в месте, где должен был отображаться плейсхолдер пишем:

[!showPH? &name=`ВАШ плейсхолдер`!]

2. Способ. Это закоментировать в классе плагина строчку, отвечающую за вырезку плейсхолдеров. Открываем файл phx.parser.class.inc.php, находим примерно в 60-х строках вот это регулярное выражение:

preg_match_all('~\[(\+|\*|\()([^:\+\[\]]+)([^\[\]]*?)(\1|\))\]~s', $template, $matches);

и комментируем его.

Минус данного подхода в том, что теоретически на сайте могут повылазить всякие ненужные (незадействованные) плейсхолдеры.

Сам же остановился на способе №2.

 

Прокомментируешь?