On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Начал разбираться с modx. При создании сниппетов проявилась проблема: переменные объявляемые внутри функции как глобальные внутри нее не видны.
    Код

    $a=5;
    function f(){
    global $a;
    echo "a=$a";
    }

    f();

    вместо a=5, выводит a=

    В чем проблема? И как ее решить?
    Спасибо.
    • Код сниппетов исполняется парсером движка через eval, видимо поэтому и проблема. Тоже сталкивался с этим, в результате есть два выхода - либо в сниппете делать инклюд внешнего файла и там уже размещать весь код, удобнее в принципе по всем пунктам, удобно редактировать, возможно нормально отлаживать, уменьшает размер файла кеша. Либо - передавать переменную в качестве параметра.

      Может быть конечно есть какой-то магический способ сделать переменные видимыми, но я его не знаю.
        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]
      • Да именно магический способ. smiley
        Я полазил по готовым сниппетам: там объявление global внутри функций и прекрасно работает. smiley
        Также широко используются классы. Но в моем случае классы городить не выгодно.
        Придется похоже использовать второй способ, хотя в моем случае получается несколько некрасиво.. smiley
        • В modx работает такая конструкция:

          $GLOBALS["a"]=5;

          function f(){
          global $a;
          echo "a=$a";
          }

          f();
          • извините за запах нафталина, но нужно делать так:
            global $a;
            $a=5;
            function f(){
            global $a;
            echo "a=$a";
            }
            
            f();