Не парсится сниппет в чанке

Загвоздка вот в чем. Пытаюсь с плагина вывести чанк. В чанк вставляю снипет (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 сентября 2015, 11:07
modx.pro
1
3 520
0
Поблагодарить автора Отправить деньги

Комментарии: 21

Василий Наумкин
21 сентября 2015, 14:10
0
Может, событие для плагина неподходящее?
    Михаил
    21 сентября 2015, 14:11
    0
    OnWebPageInit
    OnWebPagePrerender
      Василий Наумкин
      21 сентября 2015, 14:15
      0
      А теперь почитай в документации, когда эти события вызываются.

      И подумай заодно, зачем вообще вставлять в html теги MODX из плагина, если можно вставлять уже готовый результат?
        Михаил
        21 сентября 2015, 14:17
        0
        Хорошо. Спасибо. Я так и думал что не верно вывожу этот чанк, другие способы просто не получались. Пойду читать доки.
          Василий Наумкин
          21 сентября 2015, 14:25
          0
          $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.
            Михаил
            21 сентября 2015, 14:26
            0
            В принципе задача простая, просто выкинуть чанк на страницу при загрузке страницы. Попробую этот код. Спасибо большое за подсказку.
              Михаил
              21 сентября 2015, 14:27
              0
              Еще раз огромное спасибо! Так работает. Почитаю про это. Спасибо!
      Сергей Шлоков
      21 сентября 2015, 14:39
      +1
      А не проще через $modx->regClientHTMLBlock()?
      <?php
      if ($modx->event->name == 'OnLoadWebDocument') {
      	$html = $modx->getChunk($modx->getOption('modmodal_chunk'));
      	$modx->regClientHTMLBlock($html);
      }
        Михаил
        21 сентября 2015, 14:41
        0
        Как вариант. Но тут надо было чанк вставить перед
        </body>
        Михаил
        21 сентября 2015, 14:43
        0
        Да, и так сниппет так же не запарсится.
          Сергей Шлоков
          21 сентября 2015, 14:44
          0
          А галочка стоит у события OnLoadWebDocument?
            Михаил
            21 сентября 2015, 14:46
            0
            Угу. Вот как Василий дал код, вот с ним все ок, сниппеты парсятся.
              Сергей Шлоков
              21 сентября 2015, 14:53
              0
              Странно. Событие OnLoadWebDocument вызывается раньше чем событие OnParseDocument (когда парсятся сниппеты, чанки и другие плейсхолдеры), который в свою очередь вызывается раньше события OnWebPagePrerender. Поэтому для события OnWebPagePrerender нужно самостоятельно парсить плейсхолдеры, а для OnLoadWebDocument не нужно.
                Михаил
                21 сентября 2015, 14:55
                0
                Я еще попробую может что то не так делаю. Но спасибо за наводки.
                  Василий Наумкин
                  21 сентября 2015, 14:57
                  0
                  Думаю, что при OnLoadWebDocument свойство $modx->resource->_output еще пусто или потом перезаписывается.
                    Сергей Шлоков
                    21 сентября 2015, 15:08
                    0
                    В таком варианте
                    <?php
                    if ($modx->event->name == 'OnLoadWebDocument') {
                    	$html = $modx->getChunk($modx->getOption('modmodal_chunk'));
                    	$modx->regClientHTMLBlock($html);
                    }
                    $modx->resource->_output не используется.
          Сергей Шлоков
          21 сентября 2015, 16:47
          0
          Кстати, а чего сразу этот код
          <div style="display: none;">
              <div class="box-modal" id="exampleModal">
                  <div class="box-modal_close arcticmodal-close">закрыть</div>
                  [[!pdoMenu? &parents=`0`]]
              </div>
          </div>
          не вставить в шаблон в нужное место? Тогда никаких заморочек не нужно с событиями и парсингом.
            Василий Наумкин
            21 сентября 2015, 16:51
            0
            Надеюсь, что всё-таки есть причина.

            Например, это нужно выводить только админам или типа того.
            Михаил
            21 сентября 2015, 16:55
            0
            Ситуация такая что его не надо нигде вставлять. Он будет вызываться в зависимости от параметров. Например на какой странице показывать а на какой нет
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            21