Параметры GET/POST при выводе страницы

Хочу использовать параметры GET и POST при создании страницы, но не могу нигде найти, имеется ли какой-нибудь стандартный способ получения параметров внутри страницы…

Я вызываю страницу site.ru/page-name?param=1

Хочу в шаблоне для page-name написать что-то в стиле:
Передан параметр: [[+GET.param]]
Есть такая возможность? Или нужно создавать сниппет, который будет преобразовывать массив $_GET в плейсхолдеры?
Константин
26 января 2015, 21:40
modx.pro
2
16 729
0

Комментарии: 25

Виталий Серый
27 января 2015, 00:57
0
pdoTools с включенным собственным парсером умеет это из коробки, очень удобно.
docs.modx.pro/components/pdotools/parser
    Alexander V
    05 октября 2015, 02:06
    0
    Разве умеет?
      Василий Наумкин
      05 октября 2015, 03:17
      +1
        Alexander V
        05 октября 2015, 03:35
        0
        В примере по GET (Fenom) проверяется условие. А как передать параметр, который можно поместить например в pdoPage в аргумент сортировки?
          Василий Наумкин
          05 октября 2015, 03:40
          1
          +1
          Подумать совсем лень?
          [[!pdoPage?
          	&parents=`0`
          	&sortby=`[[!#get.sort:default=`id`]]`
          	&sortdir=`[[!#get.dir:default=`asc`]]`
          	&showLog=`1`
          ]]
            Alexander V
            05 октября 2015, 03:43
            0
            Правильно ли я понимаю, что при несуществующем параметре, например user.id я не получу 404?
              Василий Наумкин
              05 октября 2015, 03:47
              0
              Правильно.

              Страница, на которой указан неверный параметр для сниппета, не перестаёт существовать.
                Alexander V
                05 октября 2015, 03:50
                0
                Под вечер озадачился Fenom вкурить, пока туплю, извини)
    Константин
    27 января 2015, 10:14
    0
    Неужели нет ничего подобного в типовом функционале?

    Мне эти параметры нужны для вызова в сниппетах. Т.е. если не использовать pdoTools придется писать что-то типа:

    [[!MySnippet? &param_from_get=`[[GET? &param_name=`param`]]`]]
      Наумов Алексей
      27 января 2015, 10:16
      0
      почему бы не сделать это в сниппете? Зачем городить такую штуку?

      MySnippet:
      $param = empty($_GET['param']) ? '' : $_GET['param'];
      ...
        Константин
        27 января 2015, 13:01
        0
        Привык писать чистый код, чтобы сторонние программисты его понимали без подсказок.

        Засунуть параметр внутрь сниппета, для меня равносильно отказу от передачи параметров в функцию. Т.е.

        function PrintData()
        {
           $template = $GLOBALS['Template'];
           ...
           $count = $GLOBALS['Count']
        }
        
        и дальше в программе
        
        PrintData();
        ...
        PrintData();
        ...
        PrintData();
        Но это уже лирика. :( Я понял, что в чистом ModX'е это невозможно…
          Василий Наумкин
          27 января 2015, 13:16
          0
          Привык писать чистый код
          $GLOBALS['Template'];
          Чистый код и работа с глобальными переменными — забавно. Напомнило.

          Для работы с PHP в MODX используются сниппеты. Чанки и страницы — это HTML код, PHP они выполнять не умеют и никогда не научатся.

          Если ты хочешь получить что-то на PHP и вставить это в страницу, то нужно использовать сниппет. При этом, крайне желательно, еще бы и профильтровать переменную, чтобы тебе не накидали всяких там нехороших бяк через $_POST или $_GET.

          Если бы любой менеджер админки мог вставлять в страницу переданные снаружи потенциальным злоумышленником переменные — это был бы номер.
            Константин
            27 января 2015, 17:26
            0
            Если что, приведенная функция с глобальными переменными — это не пример чистого кода, а наоборот. Это я так выразил свое восприятие сниппетов, которые вызываются без параметров и каждый раз возвращают разные результаты, поскольку внутри эти сниппеты сами берут параметры из глобальных массивов.

            Идеологию MOdX понял, спасибо. Теперь буду думать, как с этим жить. :)
              Василий Наумкин
              27 января 2015, 18:13
              0
              Хочу в шаблоне для page-name написать что-то в стиле:
              Передан параметр: [[+GET.param]]

              Ну так сделай сниппет GET и вызывай
              [[!GET?param=`key`]]

              Код сниппета
              <?php
              return isset($_GET[$param])
              	? $modx->stripTags($_GET[$param])
              	: '';

              Сами сначала выдумают себе проблем, потом не знают как с ними жить.
                Иван
                02 февраля 2016, 13:09
                0
                Пробую тоже самое только не GET, а POST вызов сниппета ничего не выводит
                  Роман Садоян
                  02 февраля 2016, 15:53
                  0
                  Код сниппета такой:
                  <?php
                  return isset($_POST[$param])
                  	? $modx->stripTags($_POST[$param])
                  	: '';

                  ?
                    Иван
                    02 февраля 2016, 16:05
                    0
                    да
                    а при таком выводе:
                    <?php
                    $name = $_POST['name'];
                    return $name;
                    ?>
                    постоянно выводит самые первые данные, unset не помогает — при вставке в начале сниппета совсем ничего не выводит, хотя как мне казалось — стер предыдущие данные с переменной, а ведь потом она вновь считывает с POST, почему в итоге остается пустой?))
                      Роман Садоян
                      02 февраля 2016, 17:31
                      0
                      <?php
                      $name = $_POST['name'];
                      return $name;
                      ?>
                      Ты передаешь name?

                      P.S.: POST существует всегда:
                      Это 'суперглобальная' или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта.
                      Её бесполезно unset'тить
                        Иван
                        02 февраля 2016, 17:38
                        0
                        а каким образом ее сбросить??
                        форма передает POST данные они выводятся сразу же на этой странице, надо чтобы при повторном заполнении формы выводились новые данные, а не старые!
                        GET'ом то однако проще было бы это сделать да вот (совсем наверное слабоват) понять не могу по какой причине ModX у меня скрывает название страницы
                        и выходит, что когда GET передается с формы
                        www.site-name.ru/?=&name
                        как то так нету той самой index.php не могу найти где в настройках это сделать
                        Роман Садоян
                        02 февраля 2016, 18:31
                        0
                        форма передает POST данные они выводятся сразу же на этой странице, надо чтобы при повторном заполнении формы выводились новые данные, а не старые!
                        Не кэшировать сниппет.
                        [[!snippetname]]
                        Иван
                        03 февраля 2016, 03:57
                        0
                        спасибо
                        Иван
                        03 февраля 2016, 04:08
                        0
                        попробовал если не кэшировать, то вообще пустое поле выводиться
                        Иван
                        03 февраля 2016, 04:19
                        0
                        а понял, видимо ваш синтаксис для Revo
                        использование [!snippetename!] работает
    Илья Уткин
    27 января 2015, 17:32
    1
    0
    Создаете плагин на событие OnHandleRequest:
    foreach ($_GET as $key => $val) {
      $modx->setPlaceholder('GET.'.$key, $val);
    }
    return '';
    И в любом месте будет у вас
    [[+GET.param]]
      Илья Уткин
      27 января 2015, 17:32
      1
      0
      Только, думаю, надо так:
      [[!+GET.param]]
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      25