MODX. Экранирование тегов

Для экранирования тегов MODX изобретено множество способов. Какие-то из них попроще, какие-то требуют больше времени, но надежнее. 

  1. Самый простой, способ, предусмотренный самими разработчиками MODX: добавление phx фильтра :tag в конце тега. Пример: [[+pagetitle:tag]] выведет [[+pagetitle]]Но у этой конструкции есть недостатки: во-первых, она не всегда работает со сниппетами и сложными конструкциями, во-вторых, при заключении в тег <pre> мешает преобразованию последующих конструкций &amp; в символы.
  2. Следующий способ достаточно геморойный и связан с заменой символов:
    [ -> &#91;
    ] -> &#93;
  3. Способ с подставлением комментария: [<!--code-->[+pagetitle]]
  4. Применение компонента FixedPre. После установки плагина достаточно заключить теги MODX в теги <fixedpre></fixedpre>. Более подробную информацию ищите в описании компонента, и не забудьте что неплохо было бы поблагодарить автора донатом. 
  5. Можно создать сниппет modx-tag 
    <?php
    return '[['.$input.']]';

    Вызов 

    [[modx-tag? &input=`+pagetitle`]]
  6. Cамый удобный но самый непонятный для новичков вариант — автозамена скобок привязанная к событию. На вкладке «элементы» кликаем на «создать новый плагин», даем ему имя, выбираем событие OnLoadWebDocument, и вписываем туда следующий код:
    <?php
    switch($modx->event->name) {
        case 'OnLoadWebDocument':
            function replace_modxtags($matches){
            global $modx;
            $code_entities_match = array('[', ']','{', '}','`');
            $code_entities_replace = array('&#91;','&#93;','&#123;','&#125;','&#96;');
            $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;
    }