We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 31716
    • 61 Posts
    Всем добрый день!

    Сегодня целый день [жуть_какое_нехорошее_слово] над прикруткой одной штуки в модх. Эта штука по сути класс, который описан в отдельном файле php. В сниппет я его просто подцплял с помощью include.

    Так вот, вне модх он работает нормально (тестовый php файл и тоже инклудом), а из сниппета фиг.

    В конечном счете оказалось, что у меня сниппет не пережевывает global....

    Пишем такой простой тестовый сниппет:
    <?php
    $var = "test";
    
    function test()
    {
        global $var;
        return $var;
    }
    
    return "*".test()."*";
    ?>
    Так вот этот спниппет выдает **, а не *test*, как ожидалось...

    Можно это как нибудь победить? Что нибудь подстроить в модх или может в новой версии модх нормально уже работает? Или уже все, с концами и не лечится?

    С уважением, Владимир
      www.verseq.ru - необычный клавиатурный тренажер, уже через час вы сможете печатать вслепую. smiley
      www.taiso.ru - арт-группа Taiso Style (портфолио, правда до сих пор нет времени выложить за последних два года smiley )
      • 897
      • 1,620 Posts
      если вам в сниппет надо передать 1 или несколько значений используйте параметры при вызове сниппета

      [[snipet &var1=`test`]]

      <?php
      $var = $var1;
      
      function test()
      {
          global $var;
          return $var;
      }
      
      return "*".test()."*";
      ?>
      
        "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

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

        Who can defeat the Russian bear?
        • 9198
        • 100 Posts
        У меня вот так работает:
        <?php
        global $var;
        $var = "test";
        
        function test()
        {
            global $var;
            return $var;
        }
        
        return "*".test()."*";
        ?>
        


        Я так понимаю проблема из-за того, что сниппеты выполняются через eval().
          • 31716
          • 61 Posts
          Добрый день! smiley

          Quote from: aleksey.stepanov at Dec 09, 2007, 11:30 PM

          если вам в сниппет надо передать 1 или несколько значений используйте параметры при вызове сниппета
          Алексей, нет, там другая ситуация. Именно не работает корректно global в сниппетах. И более того, что самое не приятное, во всех подключаемых из сниппета (include) скриптов.

          У меня как раз последняя ситуация - я из сниппета вызываю внешний скрипт, который в свою очередь вызвает другой скрипт и т.д., т.е. просыпается настоящий дракон. Но тут засада, что global в подключенных скриптах работать перестает, если вызывать их из сниппета... В общем мне пришлось все рихтовать и переделывать специально под возможность вызывать их из MODx.

          В общем ситуация вышла каверзная и, что очень жаль, что это означает, что сниппеты не дают полную корректность работы PHP. sad

          Quote from: EVD at Dec 09, 2007, 11:47 PM

          Я так понимаю проблема из-за того, что сниппеты выполняются через eval().
          Как ни странно, но eval все отлично отрабатывает. Проблема возникает именно при вызове из сниппета. С чем это может быть связано уже не стал разбираться и, признаться, даже нет предположений на этот счет.

          С уважением, Владимир.
            www.verseq.ru - необычный клавиатурный тренажер, уже через час вы сможете печатать вслепую. smiley
            www.taiso.ru - арт-группа Taiso Style (портфолио, правда до сих пор нет времени выложить за последних два года smiley )