pdoPage "забывает" про &resources при переходе
Здравствуйте, гуру!
Вот вызов pdoPage:
Результаты поиска появляются верные, все хорошо, пагинация их верно считает, но, при переходе на любую страницу из этой выдачи, POST, естественно, сбрасывается, в &resources приходит пустота и pdoPage выводит все, что смог найти без учета найденных ресурсов.
Собственно, как его можно научить сохранять POST или &resources?
Вот вызов pdoPage:
[[!pdoPage?
&element=`pdoResources`
&parents=`5`
&resources=`[[!getIdsFromFilter]]`
&depth=`1`
&tpl=`str_detail`
&showHidden=1
&includeTVs
&limit=`10`
&maxLimit=`100`
]]
Перед ним стоит чанк с формой, которая отправляет POSTом данные для фильтрации. Сниппет getIdsFromFilter берет этот POST и возвращает список ID ресурсов.Результаты поиска появляются верные, все хорошо, пагинация их верно считает, но, при переходе на любую страницу из этой выдачи, POST, естественно, сбрасывается, в &resources приходит пустота и pdoPage выводит все, что смог найти без учета найденных ресурсов.
Собственно, как его можно научить сохранять POST или &resources?
Комментарии: 8
Ответ очевиден — нужно использовать $_GET.
Я бы с радостью, но гет получится очень большой. Да и не хотелось бы показывать пользователю все это в адресной строке…
Если нужно сохранить параметры при переходе между страницами — только GET. Как иначе ты дашь прямую ссылку на третью страницу с параметрами формы?
Даже через сессию не получится. Так что выбирай — красота или функциональность.
Даже через сессию не получится. Так что выбирай — красота или функциональность.
В том-то все и дело, что ссылка на результаты не нужна. Ресурс закрытый, все должно быть попрятано ))
В любом случае, спасибо. Буду думать над гетом.
В любом случае, спасибо. Буду думать над гетом.
Тогда сохраняй в сессию и обновляй там данные при новом POST.
Стыдно. Стыдно мне, что сразу не додумался до сессий ))
Может кому интересно будет:
В сниппете getIdsFromFilter, когда выводим список айдишников, вместо
В общем, теперь это выглядит так:
Может кому интересно будет:
В сниппете getIdsFromFilter, когда выводим список айдишников, вместо
return $strIds;
стоило прикрутить$_SESSION['strIds'] = $strIds;
Ну, и сам вызов pdoPage поменяется.&resources=`[[!getIdsFromFilter]]`
Вызов getIdsFromFilter будет теперь перед pdoPage и в pdoPage будет вызов сниппета, который забирает сессию:return $_SESSION['sessName'];
Этот костыль в виде сниппета пришлось вкручивать, потому что [[#SESSION.sessName]] отдавал сессию, сохраненную на позапрошлой странице. В общем, теперь это выглядит так:
[[!getIdsFromFilter]]
[[!pdoPage?
&element=`pdoResources`
&parents=`5`
&resources=`[[!getSessIdsStr]]` (тот самый вызов return $_SESSION['sessName'];)
&depth=`1`
&tpl=`str_detail`
&showHidden=1
&includeTVs
&limit=`10`
&maxLimit=`100`
]]
[[#SESSION.sessName]] — это кэшированный вызов.
Можно попробовать [[!#SESSION.sessName]]
Можно попробовать [[!#SESSION.sessName]]
Точно! Слона-то я и не приметил )) Работает, спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.