Routy & persistence pro hodně GET parametrů (filtrování + stránkování)
- Džůny
- Člen | 19
Ahoj všem, hážu ručník do ringu a prosím Vás o pomoc. Pokouším se tohoto dosáhnout už několik dní (nějak elegantně, ne bastlem). Situace je taková:
Ve vyhledávacím/filtrovacím formuláři searchForm se dají odeslat tyto parametry:
?phrase=Foobar
&type_id=1
&category_id=1
&city_name=Springfield
&priceMin=200
&priceMax=400
&set_defaults=true
Žádný není povinný, uživatel může kterýkoliv vynechat. Prázdné odfiltruji:
$filters = array_filter((Array)$values,
function($element) {
return $element != NULL || !empty ($element);
});
A zbytek filtrů potom doputuje pomocí GET do Presenteru, kde je použiji ve filtrovací funkci, která mi vrátí všechny vyhovující záznamy z DB, které potom předám šabloně.
Zároveň v Presenteru používám VisualPaginator, to znamená další parametry:
&visualPaginator-page=2
&do=visualPaginator-showPage
A také bych chtěl přidat řazení (cena nejvyšší/nejnižší, datum nejnovější/nejstarší), takže další parametry (dejme tomu):
&orderBy=price
&order=newest
Všechny tyhle parametry bych rád zachoval po dobu stránkování, takže moje otázky zní:
- Jak je udělat (nějak pěkně) persistentními,
- Jak pro tohle tohle proboha napsat pěkné routy.
Ad. 1) O persistentních parametrech vím, ale přece je nebudu všechny v Presenteru všechny otrocky vypisovat (nebo fakt musím)? Zkoušel jsem předat alespoň filtry jako pole a to jsem udělal persistentním, ale to:
- se mi v GET/url zkrátka nelíbí,
- neumím zpracovat pomocí routování už vůbec.
Ad. 2) Tady jsem ztracený úplně, ať se snažím jak se snažím, ať toho přečtu sebevíc (i na video jsem se podíval!), tak zkrátka na svůj případ routy napsat nedokážu.
Vím, že je tady několik podobných témat, a omlouvám se, ale jsou stará (= nemůžu do nich napsat) a nepomohla mi ujasnit si to.
Ti, kdož mi pomohou, mají u mě pivo/Kofolu/čaj, a slibuji že z prvního zaplaceného projektu plácnu dotaci i na Nette samotné. :) A předem všem děkuji.
Poslední doplňující otázky:
- Kdybych místo presenter/action/category_id=1 chtěl presenter/action/category=foobar, potřebuji si v DB uchovávat slug? Nebo stačí vytáhnout název kategorie (př. Fóóbař) a někde to znásilnit přes webalize?
- Jak ve stejném Presenteru všechny persistentní proměnné smazat při nějaké akci, kde nebudou potřeba? Naházet si je předem do pole a potom jim všem ve foreach nastavit NULL?
Finální poznámka: Jsem velmi zdatný plavec, co se routování týče… připadám si jako by mi zase bylo 16 a snažil jsem se pochopit, jak fungují pointery.
- Kori
- Člen | 73
Ahoj, pokud se s nechces s routama drbat sam, tak vyzkousej treba https://forum.nette.org/…ro-routovani