Параметры GET/POST при выводе страницы
Хочу использовать параметры GET и POST при создании страницы, но не могу нигде найти, имеется ли какой-нибудь стандартный способ получения параметров внутри страницы…
Я вызываю страницу site.ru/page-name?param=1
Хочу в шаблоне для page-name написать что-то в стиле:
Я вызываю страницу site.ru/page-name?param=1
Хочу в шаблоне для page-name написать что-то в стиле:
Передан параметр: [[+GET.param]]
Есть такая возможность? Или нужно создавать сниппет, который будет преобразовывать массив $_GET в плейсхолдеры? Комментарии: 25
pdoTools с включенным собственным парсером умеет это из коробки, очень удобно.
docs.modx.pro/components/pdotools/parser
docs.modx.pro/components/pdotools/parser
Разве умеет?
В примере по GET (Fenom) проверяется условие. А как передать параметр, который можно поместить например в pdoPage в аргумент сортировки?
Подумать совсем лень?
[[!pdoPage?
&parents=`0`
&sortby=`[[!#get.sort:default=`id`]]`
&sortdir=`[[!#get.dir:default=`asc`]]`
&showLog=`1`
]]
Правильно ли я понимаю, что при несуществующем параметре, например user.id я не получу 404?
Правильно.
Страница, на которой указан неверный параметр для сниппета, не перестаёт существовать.
Страница, на которой указан неверный параметр для сниппета, не перестаёт существовать.
Под вечер озадачился Fenom вкурить, пока туплю, извини)
Неужели нет ничего подобного в типовом функционале?
Мне эти параметры нужны для вызова в сниппетах. Т.е. если не использовать pdoTools придется писать что-то типа:
Мне эти параметры нужны для вызова в сниппетах. Т.е. если не использовать pdoTools придется писать что-то типа:
[[!MySnippet? ¶m_from_get=`[[GET? ¶m_name=`param`]]`]]
почему бы не сделать это в сниппете? Зачем городить такую штуку?
MySnippet:
MySnippet:
$param = empty($_GET['param']) ? '' : $_GET['param'];
...
Привык писать чистый код, чтобы сторонние программисты его понимали без подсказок.
Засунуть параметр внутрь сниппета, для меня равносильно отказу от передачи параметров в функцию. Т.е.
Засунуть параметр внутрь сниппета, для меня равносильно отказу от передачи параметров в функцию. Т.е.
function PrintData()
{
$template = $GLOBALS['Template'];
...
$count = $GLOBALS['Count']
}
и дальше в программе
PrintData();
...
PrintData();
...
PrintData();
Но это уже лирика. :( Я понял, что в чистом ModX'е это невозможно… Привык писать чистый код
$GLOBALS['Template'];
Чистый код и работа с глобальными переменными — забавно. Напомнило.Для работы с PHP в MODX используются сниппеты. Чанки и страницы — это HTML код, PHP они выполнять не умеют и никогда не научатся.
Если ты хочешь получить что-то на PHP и вставить это в страницу, то нужно использовать сниппет. При этом, крайне желательно, еще бы и профильтровать переменную, чтобы тебе не накидали всяких там нехороших бяк через $_POST или $_GET.
Если бы любой менеджер админки мог вставлять в страницу переданные снаружи потенциальным злоумышленником переменные — это был бы номер.
Если что, приведенная функция с глобальными переменными — это не пример чистого кода, а наоборот. Это я так выразил свое восприятие сниппетов, которые вызываются без параметров и каждый раз возвращают разные результаты, поскольку внутри эти сниппеты сами берут параметры из глобальных массивов.
Идеологию MOdX понял, спасибо. Теперь буду думать, как с этим жить. :)
Идеологию MOdX понял, спасибо. Теперь буду думать, как с этим жить. :)
Хочу в шаблоне для page-name написать что-то в стиле:
Передан параметр: [[+GET.param]]
Ну так сделай сниппет GET и вызывай
[[!GET?param=`key`]]
Код сниппета
<?php
return isset($_GET[$param])
? $modx->stripTags($_GET[$param])
: '';
Сами сначала выдумают себе проблем, потом не знают как с ними жить.
Пробую тоже самое только не GET, а POST вызов сниппета ничего не выводит
Код сниппета такой:
?
<?php
return isset($_POST[$param])
? $modx->stripTags($_POST[$param])
: '';
?
да
а при таком выводе:
<?php
$name = $_POST['name'];
return $name;
?>
постоянно выводит самые первые данные, unset не помогает — при вставке в начале сниппета совсем ничего не выводит, хотя как мне казалось — стер предыдущие данные с переменной, а ведь потом она вновь считывает с POST, почему в итоге остается пустой?))
а при таком выводе:
<?php
$name = $_POST['name'];
return $name;
?>
постоянно выводит самые первые данные, unset не помогает — при вставке в начале сниппета совсем ничего не выводит, хотя как мне казалось — стер предыдущие данные с переменной, а ведь потом она вновь считывает с POST, почему в итоге остается пустой?))
<?php
$name = $_POST['name'];
return $name;
?>
Ты передаешь name?P.S.: POST существует всегда:
Это 'суперглобальная' или автоматическая глобальная переменная. Это просто означает что она доступна во всех контекстах скрипта.Её бесполезно unset'тить
а каким образом ее сбросить??
форма передает POST данные они выводятся сразу же на этой странице, надо чтобы при повторном заполнении формы выводились новые данные, а не старые!
GET'ом то однако проще было бы это сделать да вот (совсем наверное слабоват) понять не могу по какой причине ModX у меня скрывает название страницы
и выходит, что когда GET передается с формы
www.site-name.ru/?=&name…
как то так нету той самой index.php не могу найти где в настройках это сделать
форма передает POST данные они выводятся сразу же на этой странице, надо чтобы при повторном заполнении формы выводились новые данные, а не старые!
GET'ом то однако проще было бы это сделать да вот (совсем наверное слабоват) понять не могу по какой причине ModX у меня скрывает название страницы
и выходит, что когда GET передается с формы
www.site-name.ru/?=&name…
как то так нету той самой index.php не могу найти где в настройках это сделать
форма передает POST данные они выводятся сразу же на этой странице, надо чтобы при повторном заполнении формы выводились новые данные, а не старые!Не кэшировать сниппет.
[[!snippetname]]
спасибо
попробовал если не кэшировать, то вообще пустое поле выводиться
а понял, видимо ваш синтаксис для Revo
использование [!snippetename!] работает
использование [!snippetename!] работает
Создаете плагин на событие OnHandleRequest:
foreach ($_GET as $key => $val) {
$modx->setPlaceholder('GET.'.$key, $val);
}
return '';
И в любом месте будет у вас[[+GET.param]]
Только, думаю, надо так:
[[!+GET.param]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.