We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26091
    • 3 Posts
    Всем привет! Изучаю MODx. Вот дошел до написания собственного плагина. Суть его такова: он должен заменять содержимое документов под определенными id в соответствии с шаблоном, который находится в чанке (shortStoryTpl).
    Вроде заработало, плейсхолдеры подставляются, документ отображается по шаблону.
    Проблема в том, что шаблон повторяется несколько раз в одном документе. Тоесть выводится содержимое документа несколько (9) раз.
    В упор не пойму почему так sad
    Привожу код плагина:
    ’postCaption’, ’miniGalleryDir’, ’miniGalleryContent’ - плейсхолдеры с чанка-шаблона
    $id=$modx->documentIdentifier;
    $ids=array(6,7);
    if(in_array($id,$ids)){
      $content=$modx->getDocument($id);
      $content=$content['content'];
      $postCaption=$modx->getTemplateVar('postCaption');
      $postCaption=$postCaption['value'];
      $miniGalleryDir=$modx->getTemplateVar('miniGalleryDir');
      $miniGalleryDir=$miniGalleryDir['value'];
    
      $chunk=$modx->parseChunk('shortStoryTpl',array(
        'postCaption'=>$postCaption,
        'miniGalleryDir'=>$miniGalleryDir,
        'miniGalleryContent'=>$content
       ),'[+','+]');
    
      $doc=$modx->documentOutput;
      $doc=str_replace($content,$chunk,$doc);
      $modx->documentOutput=$doc;
    }
    

    Плагин повесил на событие OnParseDocument
      • 26091
      • 3 Posts
      неужели никто не знает в чем может быть проблема?
      подскажите хоть куда грести!
        • 9085
        • 630 Posts
        Quote from: san4ezy at Apr 01, 2011, 03:15 PM

        неужели никто не знает в чем может быть проблема?
        подскажите хоть куда грести!
        http://rtfm.modx.com/display/Evo1/Plugins - похоже, что первый пример, как раз "в тему".
        Ещё можно "упростить" замену (убрать плейсхолдеры). Ну и отслеживать количество выполнений плагина.

        Кроме того, не мешало бы проверять событие:
        $e = &$modx->Event;
        switch ($e->name) {
        case "OnParseDocument":

        И почитать про парсинг документов в MODx... (link coming soon...)
          Правильно заданный вопрос повышает вероятность получения нужного ответа.
          Что-то не работает? Загляните в лог ошибок!
          Есть проблема? "Локализуйте" её!
          Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx
          • 26091
          • 3 Posts
          Нашел причину повторения выполнения кода плагина. Содержимое документа преобразуется по шаблону и в него заново вставляется то содержимое, которое заменяется строкой: $doc=str_replace($content,$chunk,$doc); Происходит циклическая замена. (надеюсь не сильно закрутил smiley )
          Решение нашлось (возможно и не самое правильное): при первом срабатывании кода изменить содержимое $content. Я заменил первый пробел в тексте на два пробела. Этим самым избегаем циклическую замену.

          Привожу код:
          $id=$modx->documentIdentifier;
          $ids=array(6,7);
          if(in_array($id,$ids)){
            $content=$modx->getDocument($id);
            $content=$content['content'];
            $content2=preg_replace('/( ){1}/i','$1 ',$content);
            $postCaption=$modx->getTemplateVar('postCaption');
            $postCaption=$postCaption['value'];
            $miniGalleryDir=$modx->getTemplateVar('miniGalleryDir');
            $miniGalleryDir=$miniGalleryDir['value'];
          
            $chunk=$modx->parseChunk('shortStoryTpl',array(
              'postCaption'=>$postCaption,
              'miniGalleryDir'=>$miniGalleryDir,
              'miniGalleryContent'=>$content2
             ),'[+','+]');
          
            $doc=$modx->documentOutput;
            $doc=str_replace($content,$chunk,$doc);
            $modx->documentOutput=$doc;
          }
          


          Спасибо esche за советы.
            • 9085
            • 630 Posts
            Quote from: san4ezy at Apr 02, 2011, 02:05 PM

            Нашел причину повторения выполнения кода плагина
            ...
            Спасибо esche за советы.
            Не за что.. Возможно, появится желание "облагородить" плагин.. Да и вообще, возможно, будет полезным:
            http://sottwell.com/how-modx-works.html
            http://wiki.modxcms.com/index.php/Snippet_call_anatomy
              Правильно заданный вопрос повышает вероятность получения нужного ответа.
              Что-то не работает? Загляните в лог ошибок!
              Есть проблема? "Локализуйте" её!
              Ответы на большинство вопросов по MODx | MODx RTFM | API Evo Revo | галопом по Европам Азиям smiley wikibooks(ru) Ditto(en) | Wayfinder e-book | Заметки и о MODx