We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 19164
    • 1,215 Posts
    Quote from: Rustu at Aug 03, 2007, 03:01 AM

    А обычным php нельзя оформлять?

    Легкие пути не для вас?
    Можно обычным пхп, но для этого нужно знать как минимум API движка, потому как вместо [*id*] в сниппете нужно использовать $modx->documentObject[’id’]; а для вызовов сниппетов $modx->runSnippet, я в эти тонкости не посвящен, так что смотрите код движка, разбирайтесь.
      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]
      • 25768
      • 44 Posts
      просто php я хоть как то знаю, а эту PHx нет...
        • 25768
        • 44 Posts
        А где про PHx почитать можно, на оф сайте нет ничего, а сайт автора не работает...
          • 25768
          • 44 Posts
          нашел
            • 33694
            • 742 Posts
            Внесу всё таки ясность:

            Вызов
            $modx->documentIdentifier
            возвращает id текущей страницы.

            Следовательно изначальный пример принимает вид:
            <? php
            
            if ($modx->documentIdentifier == 1)
            	echo "[!Wayfinder? &startId=`2` &level=`1`!]";
            else
            	echo "[!Wayfinder? &startId=`[*parent*]` &level=`1`!]";
            ?>
              • 31213
              • 153 Posts
              Для документа с ID=5:
              <?php
              echo $modx->documentIdentifier == 5 ? $modx->runSnippet('WayFinder',array('startId' => 2, 'level' => 1)) : $modx->runSnippet('WayFinder',array('startId' => $modx->documentObject['parent'], 'level' => 1));
              ?>
              
                • 19164
                • 1,215 Posts
                Можно использовать вариант с конфигурациями. Создаем в \assets\snippets\wayfinder\configs\ файл test.config.php

                В него пишем
                <?php
                $startId = $modx->documentIdentifier == 1 ? 2 : $modx->documentObject['parent'];
                $level = 1;
                ?>


                И вызываем [!Wayfinder? &config=`test`!]

                Хотя все это извращения - PHx самый прогрессивный способ, если научится им пользоваться.

                ЗЫ Кстати надо использовать не echo а return, ибо парсер по своему там воротит, а не сразу выдает в общий поток.
                  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]
                  • 31213
                  • 153 Posts
                  Metaller Привожу метод класса DocumentParser:

                  function evalSnippet($snippet, $params) {
                  $etomite= $modx= & $this;

                  $modx->event->params= & $params; // store params inside event object
                  if (is_array($params)) {
                  extract($params, EXTR_SKIP);
                  }
                  ob_start();
                  $snip= eval ($snippet);
                  $msg= ob_get_contents();
                  ob_end_clean();

                  if ($msg && isset ($php_errormsg)) {
                  if (!strpos($php_errormsg, ’Deprecated’)) { // ignore php5 strict errors
                  // log error
                  $this->logEvent(1, 3, "<b>$php_errormsg</b>

                  $msg", $this->currentSnippet . " - Snippet");
                  if ($this->isBackend())
                  $this->Event->alert("An error occurred while loading. Please see the event log for more information<p />$msg");
                  }
                  }
                  unset ($modx->event->params);
                  return $msg . $snip;
                  }
                  Я выделил блок, который собственно выполняет сниппет.

                  Как можно заметить, он сохраняет весь буфер вывода и очищает его, поэтому результат echo\print не будет выведен, но результат этого echo\print запомнится, и потом вставится только в соответствующее место документа, а не тупо сбросится в выводной поток.

                  Поэтому без разницы, как выдывать результат - return, echo или print