We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 9932
    • 66 Posts
    Как же мне получить контент другой страницы? shocked
    - пробовал использовать [!GetField?docid=`1` &field=`content` !] но возвращается неотпарсенный контент.
    т.е. если на той другой странице есть вызов сниппета то GetField возврашает не результат работы а просто тупо вызов сниппета, текстом.
    - пробовал насильно парсить документ $modx->parseDocumentSource($source); но ничего не происходит.


    Я уже спрашивал но так никто и не ответил. А мне очень нужно. Взываю к гуру MODx-a
      • 33694
      • 742 Posts
      Если в API копаться нет желания или ещё чего нибудь, то используйте Ditto, его параметр &documents, и соответствующий вашим требованиям шаблон вывода.
        • 9932
        • 66 Posts
        да как же нет ... я уже все перекопал ... ничего не подходит ... или не работает(см. выше) ...
        я потому и прошу помоши ...

        попробовал Ditto?documents=`1`  с шаблоном
        <div>[+content+]</div>
        это не то ... он выводит такой же неотпарсенный контент как и GetField

        если бы тут был вопрос только в php то я бы быстро что то наклепал .. а тут дело в ядре ... я итак уже его все перекопал но что то ничнго дельного не нашел ...
          • 33694
          • 742 Posts
          Понятненько.

          Ну а вот
          … - пробовал насильно парсить документ $modx->parseDocumentSource($source); но ничего не происходит.
          На а конкретнее? Тоже неотпарсеный возвращает? На исходной странице-то сниппет парсится?
            • 28814 ☆ A M B ☆
            • 1,086 Posts
            Хм.. да что может быть проще.
            Создайте сниппет с каким-нибудь названием, например - Snippet, впишите туда этот код:

            if (!isset($id)) {
            $id = $modx->documentIdentifier;
            }
            $tbl = $this->dbConfig[’dbase’].".".$this->dbConfig[’table_prefix’]."site_content";
            $sql = "SELECT content FROM $tbl WHERE $tbl.id = $id";
            $query = $modx->dbQuery($sql); 
            $result = $modx->fetchRow($query);

            $output = $result[’content’];

            return $output;

            вызов на странице: [[Snippet?id=12345]], где 12345 - номер страницы, с которой необходимо получить содержимое.
              Разработка сайтов и программных модулей на MODX.
              Опыт работы на MODx с 2005 года. Высокое качество.
              Компания Baltic Design Colors: http://www.bdcolors.ru.
              • 897
              • 1,620 Posts
              Aleksey Stepanov Reply #6, 19 years ago
              да чем вас в таком случаи не устраивает getFiled я не пойму
                "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                Не используйте Revo для "просто сайтов". Используйте Evo

                Who can defeat the Russian bear?
                • 9932
                • 66 Posts
                ну я же обьясняю .. да и сами попробуйте.
                Ну вот на примере:
                1. пусть у вас есть страница за номером 55. на ней есть сниппет SomeSnippet c таким кодом:
                $output = "Hello world";
                return $output;
                

                И собственно сама страница:
                [!SomeSnippet!]
                

                2. Пусть есть другая страница с таким кодом:
                <h3>The content of page 55</h3>
                [!GetField?docid=`55` &field=`content` !]
                

                Собственно говоря тут может быть не GetField, а Ditto или вышеприведенный сниппет. Суть от этого не меняется.
                Ну и собственно результат:
                То что есть
                The content of page 55
                [!GetField?docid=`55` &field=`content` !]
                

                И то что должно быть
                The content of page 55
                Hello world
                

                Неужели нет разницы?
                Я думаю что страница парсится один раз. А так как вывод сниппета(GetField) содержит вызов другого сниппета(SomeSnippet) то он и не парсится а возвращается как текст. Или причина может быть другоя я не знаю, но результат на лицо.
                Все вышеприведенные советы будут работать только в том случае если на странице 55 нет вызовов сниппетов. К сожалению это не мой случай.
                  • 28814 ☆ A M B ☆
                  • 1,086 Posts
                  А, ну Вы бы так и объясняли smiley
                  Пришлось немножко покопаться в исходных файлах, в итоге родилось это:

                  Сниппет: GetDynamicContent
                  Параметр: id страницы, с которой берется содержимое вместе с результатом работы включенных в него других сниппетов.
                  Вызов: Некешируемый [!GetDynamicContent?id=12345 !] или кешируемый [[GetDynamicContent?id=12345 ]]
                  <?php
                  if (!isset($id)) {
                      $id = $modx->documentIdentifier;
                  }
                  $tbl = $this->dbConfig['dbase'].".".$this->dbConfig['table_prefix']."site_content";
                  $sql = "SELECT content FROM $tbl WHERE $tbl.id = $id";
                  $query = $modx->dbQuery($sql);
                  $result = $modx->fetchRow($query);
                  
                  $output = $result['content'];
                  
                  if (strpos($output, '[!') > -1) {
                      $output = str_replace('[!', '[[', $output);
                      $output = str_replace('!]', ']]', $output);
                  }
                  
                  $output = $modx->parseDocumentSource($output);
                  
                  return $output;
                  
                    Разработка сайтов и программных модулей на MODX.
                    Опыт работы на MODx с 2005 года. Высокое качество.
                    Компания Baltic Design Colors: http://www.bdcolors.ru.
                    • 19164
                    • 1,215 Posts
                    Как то сложно все - я лично уже давно пользуюсь плагином PHx. Он использует собственный парсер для обработки страниц (т.е. при инсталяции этого плагина используется парсер плагина и не системный), поэтому проблем с вызовами сниппетов в сниппетах с параметрами в виде сниппетов содержащих сниппеты smiley нет - все нормально разбирается на куски и парсится одно за другим.
                      DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

                      Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

                      [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]
                      • 9932
                      • 66 Posts
                      Igor, это просто круто ... smiley все работает. Вы вернули мне радость к жизни!  grin

                      Кстати , я тоже "немного" покопавшись в исходных кодах написал почти такой же сниппет.
                      единственная разница вот в этих 2 строчках:
                      $output = str_replace('[!', '[[', $output);
                      $output = str_replace('!]', ']]', $output);
                      

                      Выходит что  $modx->parseDocumentSource() обрабатывает только вызовы кешируемых сниппетов?