Не парсится сниппет в чанке
Загвоздка вот в чем. Пытаюсь с плагина вывести чанк. В чанк вставляю снипет (pdoMenu) но вызов просто выводится теекстом:
$html = $modx->getChunk($modx->getOption('modmodal_chunk'));
if(strpos($modx->resource->_output, '</body>') !== false){
$modx->resource->_output = preg_replace("/(<\/body>)/i", $html . "\n\\1", $modx->resource->_output, true);
}
Код чанка:<div style="display: none;">
<div class="box-modal" id="exampleModal">
<div class="box-modal_close arcticmodal-close">закрыть</div>
[[!pdoMenu? &parents=`0`]]
</div>
</div>
Погуглив ничего не нашел. Прочитал это но тоже свет не пролил. Кто сталкивался
Поблагодарить автора
Отправить деньги
Комментарии: 21
Может, событие для плагина неподходящее?
OnWebPageInit
OnWebPagePrerender
OnWebPagePrerender
А теперь почитай в документации, когда эти события вызываются.
И подумай заодно, зачем вообще вставлять в html теги MODX из плагина, если можно вставлять уже готовый результат?
И подумай заодно, зачем вообще вставлять в html теги MODX из плагина, если можно вставлять уже готовый результат?
Хорошо. Спасибо. Я так и думал что не верно вывожу этот чанк, другие способы просто не получались. Пойду читать доки.
$html = $modx->getChunk($modx->getOption('modmodal_chunk'));
// Парсинг содержимого чанка
$modx->parser->processElementTags('', $html, true, false, '[[', ']]', array(), 10);
$modx->parser->processElementTags('', $html, true, true, '[[', ']]', array(), 10);
// Вставка результата
if (strpos($modx->resource->_output, '</body>') !== false){
$modx->resource->_output = preg_replace("/(<\/body>)/i", $html . "\n\\1", $modx->resource->_output, true);
}
И вот тогда, по идее, можно будет использовать этот плагин при событии OnWebPagePrerender.
В принципе задача простая, просто выкинуть чанк на страницу при загрузке страницы. Попробую этот код. Спасибо большое за подсказку.
Еще раз огромное спасибо! Так работает. Почитаю про это. Спасибо!
А не проще через $modx->regClientHTMLBlock()?
<?php
if ($modx->event->name == 'OnLoadWebDocument') {
$html = $modx->getChunk($modx->getOption('modmodal_chunk'));
$modx->regClientHTMLBlock($html);
}
Как вариант. Но тут надо было чанк вставить перед
</body>
Да, и так сниппет так же не запарсится.
А галочка стоит у события OnLoadWebDocument?
Угу. Вот как Василий дал код, вот с ним все ок, сниппеты парсятся.
Странно. Событие OnLoadWebDocument вызывается раньше чем событие OnParseDocument (когда парсятся сниппеты, чанки и другие плейсхолдеры), который в свою очередь вызывается раньше события OnWebPagePrerender. Поэтому для события OnWebPagePrerender нужно самостоятельно парсить плейсхолдеры, а для OnLoadWebDocument не нужно.
Я еще попробую может что то не так делаю. Но спасибо за наводки.
Думаю, что при OnLoadWebDocument свойство $modx->resource->_output еще пусто или потом перезаписывается.
В таком варианте
<?php
if ($modx->event->name == 'OnLoadWebDocument') {
$html = $modx->getChunk($modx->getOption('modmodal_chunk'));
$modx->regClientHTMLBlock($html);
}
$modx->resource->_output не используется.
Кстати, а чего сразу этот код
<div style="display: none;">
<div class="box-modal" id="exampleModal">
<div class="box-modal_close arcticmodal-close">закрыть</div>
[[!pdoMenu? &parents=`0`]]
</div>
</div>
не вставить в шаблон в нужное место? Тогда никаких заморочек не нужно с событиями и парсингом.
Надеюсь, что всё-таки есть причина.
Например, это нужно выводить только админам или типа того.
Например, это нужно выводить только админам или типа того.
Fenom в помощь и никаких плагинов. :)
Ситуация такая что его не надо нигде вставлять. Он будет вызываться в зависимости от параметров. Например на какой странице показывать а на какой нет
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.