Написал плагин, который перед сохранением документа экранирует тегом <!----> все спецСкобки MODX внутри тега <code>...</code>. В этом случае код MODX внутри тега <code> выполняться не будет. При выводе страницы, перед отдачей страницы в браузер удаляет тег <!----> внутри тега <code>...</code>. Таким образом, на странице с примером показанный код MODX будет отображаться без комментариев и остается рабочим его копипасте.
Исправленные баги плагина тут
http://zaswerd.ru/modx/plugins/157.html
Вешаю на два события: OnBeforeDocFormSave (перед сохранением) и OnWebPagePrerender (перед отдачей браузеру)
$e = &$modx->Event;
if (($e->name=='OnBeforeDocFormSave')||($e->name=='OnWebPagePrerender')){
//если одно из событий - то начинаем работу
$replace= array ();
$matches= array ();
$code = array('{{','{!','[[','[!','!]',']]','!}','}}','[+','+]','[(',')]');
$alias = array('{<!---->{','{<!---->!','[<!---->[','[<!---->!','!<!---->]',']<!---->]','!<!---->}','}<!---->}','[<!---->+','+<!---->]','[<!---->(',')<!---->]');
//если страница сохраняется - вставляем экранирование комментариями
if ($e->name=='OnBeforeDocFormSave') {
$content = $GLOBALS['content'];
if (preg_match_all('~<code(.*?)</code>~', $content, $matches)) {
$count= count($matches[1]);
for ($i= 0; $i < $count; $i++)
$replace[$i] = "<code".str_replace($code, $alias,$matches[1][$i])."</code>";
$content = str_replace($matches[0], $replace, $content);
}
$GLOBALS['content'] = $content;
}
//иначе - удаляем экранирование комментариями
else{
$content = $modx->documentOutput;
if (preg_match_all('~<code(.*?)</code>~', $content, $matches)) {
$count= count($matches[1]);
for ($i= 0; $i < $count; $i++)
$replace[$i] = "<code".str_replace($alias, $code, $matches[1][$i])."</code>";
$content = str_replace($matches[0], $replace, $content);
}
$modx->documentOutput = $content ;
}
}