MODX. Экранирование тегов
Отредактировано: 27 Июня 2019
Для экранирования тегов MODX изобретено множество способов. Какие-то из них попроще, какие-то требуют больше времени, но надежнее.
- Самый простой, способ, предусмотренный самими разработчиками MODX: добавление phx фильтра :tag в конце тега. Пример: [[+pagetitle:tag]] выведет [[+pagetitle]]. Но у этой конструкции есть недостатки: во-первых, она не всегда работает со сниппетами и сложными конструкциями, во-вторых, при заключении в тег <pre> мешает преобразованию последующих конструкций & в символы.
- Следующий способ достаточно геморойный и связан с заменой символов:
[ -> [
] -> ] - Способ с подставлением комментария: [<!--code-->[+pagetitle]]
- Применение компонента FixedPre. После установки плагина достаточно заключить теги MODX в теги <fixedpre></fixedpre>. Более подробную информацию ищите в описании компонента, и не забудьте что неплохо было бы поблагодарить автора донатом.
- Можно создать сниппет modx-tag
<?php return '[['.$input.']]';
Вызов
[[modx-tag? &input=`+pagetitle`]]
- Cамый удобный но самый непонятный для новичков вариант — автозамена скобок привязанная к событию. На вкладке «элементы» кликаем на «создать новый плагин», даем ему имя, выбираем событие OnLoadWebDocument, и вписываем туда следующий код:
<?php switch($modx->event->name) { case 'OnLoadWebDocument': function replace_modxtags($matches){ global $modx; $code_entities_match = array('[', ']','{', '}','`'); $code_entities_replace = array('[',']','{','}','`'); $code = str_replace($code_entities_match,$code_entities_replace,$matches[1]); return '<pre'.$code.'</pre>'; } $content = preg_replace_callback("#<pre(.*?)</pre>#s", "replace_modxtags", $modx->resource->get('content')); $modx->resource->set('content', $content); break; }
Здравствуйте!
Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.