We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 2517
    • 8 Posts
    Как тестить снипеты?

    В снипете забираю контент чанка:

    $chunk=$modx->getChunk($tpl);


    потом уже выдираем новости, и по шаблону (чанку) их выводим... Но проблема в том, что ни ошибок, нифига не выводит снипет (установлен на странице).

    Вопрос:
    1) как тестировать спинеты?
    2) почему снипет ничего не выводит, даже если просто ставишь на вывод "1"?

    P.S. чем быстрее разберёмся с проблемой, тем быстрее будет выход первой версии полноценных ньюсов smiley
      • 30354
      • 227 Posts
      Нифига не понял... что значит "ничего не выводит"? Простейший вид таков:

      <?
      $output = `1`;
      return $output;
      ?>

      Уверяю. отлично выводит. Тестировать так же... Некоторые ошибки перехватывает парсер, некоторые отдает сам php, а системные данные можно сразу через "echo" выводить.
        http://www.avizion.ru/ — строим стартап!
        http://tonatos.ru/ — Заходите в гости...
        • 33694
        • 742 Posts
        А у вас кеширование в системе не включено случайно? Снипет вызвается как кешируемый?

        [[кешируемый]] - один раз вызвал, и всю жизь при последующих вызовах будешь видеть первый вывод(ок)
        [!некешируемый!] - как раз для тестирования smiley
          • 2517
          • 8 Posts
          Да эт я всё понимаю.. Но не воводил нефига... В процессе тетсирования выловил багу непонятную.. оч. странную...

          МОДХ кеширует себе данные с чанков, и все они доступны с

          $modx->chunkCache (array)


          Но тут прикол... Во время выполнения скрипта в массиве chunkCache мо чанк пустой... В конце выполнения скрипта (ставим в индекс самой последней строчкой) при выполнении некой конструкции

          echo "<pre>"; print_r($modx->chunkCache);


          чанк на месте в полном объёме....

          Ладно, идём далее.. Не хочет по хорошему, будем бить молотком и зубилом grin

          Пишем код:

          $SQL = "SELECT snippet FROM autocms_site_htmlsnippets WHERE name = 'newsChank';";
          $rs = $modx->db->query($SQL);  
          if ($modx->db->getRecordCount($rs) > 0) 
          {
                 $row = $modx->db->getRow($rs);
                 return $row["snippet"];
          }


          Смотрим, что мы получаем... И глаза потихоньку на выкат... shocked дело в том, чтов БД лежит нормульный код чанка:
          <div>[+newsTitle+]</div>
          <div>[+shortText+]</div>
          <div>[+categoryName+]</div>


          на выходе видим только:

          <div></div>
          <div></div>
          <div></div>


          может это у меня MySQL глючит? huh shocked >:(

          Когда поменял [+newsTitle+] на ^^newsTitle^^ как и не было проблемы....

          Иследуем дальше... Смотрим пример чанка для Дитто... Такие же пересенные, тестируем - работает... undecided
          Что-то я не догоняю.... Придётся отказаться от [+VAR+] этой конструкции....
            • 33694
            • 742 Posts
            * я сейчас возможно понесу редкий бред, но "я так думаю" © ничем не подкрепляя

            А не может быть такого, что при запросе данных из базы средствами системы (через API, как вы и делаете) она (система) сразу же пытается плейсхолдеры подставить? А т.к. ни одних из них у вас не выставлен, то на выход они и не подают (заменяются на "ничто").

            Я бы попробовал сделать setPlaceholder($name, $value); а помом уже выполнить тот удар зубилом (запросить из базы чанк с этими плейсхолдерами) и посмотреть что будет.

            http://www.modxcms.com/setplaceholder.html



            upd:
            Забыл сказать: за всё своё время, я не выполнил ещё ни одного запроса к базе. Т.ч. то, что я тут пишу, много-го не стоит... лучше наверное вообще не мешать, как в поговорке про мастера smiley
              • 31213
              • 153 Posts
              Quote from: away at Mar 04, 2007, 09:27 AM

              $SQL = "SELECT snippet FROM autocms_site_htmlsnippets WHERE name = 'newsChank';";
              $rs = $modx->db->query($SQL);  
              if ($modx->db->getRecordCount($rs) > 0) 
              {
                     $row = $modx->db->getRow($rs);
                     return $row["snippet"];
              }


              Смотрим, что мы получаем... И глаза потихоньку на выкат... shocked дело в том, чтов БД лежит нормульный код чанка:
              <div>[+newsTitle+]</div>
              <div>[+shortText+]</div>
              <div>[+categoryName+]</div>


              на выходе видим только:

              <div></div>
              <div></div>
              <div></div>


              Дело в том, что подстановка переменных типа [+VAR+], происходит после парсинга всех сниппетов и чанков, поэтому у вас все отобразилось правильно.

              Я так и не понял, что вы хотите сделать? И почему не парсите свои же собственные переменные вида [+VAR+]??
                • 26586
                • 184 Posts
                Обычно после получения чанка , плейсхолдеры в нем надо заполнить.

                если его отдать на выход из сниппета в документ, то нестандартные плейсхолдеры просто потеряются (станут=’’). Подставятся только [*поле*], но это уже сделает кто-то выше =)

                есть несколько вариантов

                простой

                $chunk=$modx->getChunk($tpl);
                $out = str_replice('[+myplace+]', 'что-то', $chunk);
                


                более правильный, но после него вроде как остаются лишние плейсхолдеры

                  $modx->setPlaceholder('myplace', 'что-то');
                  $out = $modx->mergePlaceholderContent($modx->mergeChunkContent($chunk));
                


                а мне нравится такой
                // в самом начале сниппета
                if (!class_exists("PHxParser")) include_once $modx->config['rb_base_dir'] . "plugins/phx/phx.parser.class.inc.php";
                $PHx = new PHxParser();
                
                //там где собираем чанк
                $PHx->setPHxVariable('myplace',  'что-то');
                $out = $PHx->Parse($chunk);
                

                  • 33694
                  • 742 Posts
                  Дело в том, что подстановка переменных типа [+VAR+], происходит после парсинга всех сниппетов и чанков, ...
                  Подумайте, а не наоборот? Ведь прямо в вызовах сниппетов уже можно использовать эти переменные, т.е. ещё даже до того как снипет будет обрабатываться.
                    • 31213
                    • 153 Posts
                    Quote from: [e
                    Bu$ter link=topic=12712.msg84887#msg84887 date=1173254701]
                    Дело в том, что подстановка переменных типа [+VAR+], происходит после парсинга всех сниппетов и чанков, ...
                    Подумайте, а не наоборот? Ведь прямо в вызовах сниппетов уже можно использовать эти переменные, т.е. ещё даже до того как снипет будет обрабатываться.
                    Возьмите WebLogin сниппет и посмотрите, как там организована работа с [+VAR+].
                    Может все же перепутали с [*VAR*]??
                      • 33694
                      • 742 Posts
                      Quote from: Vadya at Mar 11, 2007, 12:11 PM

                      ...
                      Может все же перепутали с [*VAR*]??
                      Похоже на то rolleyes
                      :-X