Řazení názvu podle abecedy
- tomas_straka
- Člen | 32
Ahoj, prosim o nasmerovani nebo napad. Mam udelat v PHP(nette) rovnaní podle abecedy. Když uživatel klikne na a-z nebo z-a tak by se měla tabulka srovnat. Mam FirmyPresenter, ktery vezme firmy z DB a posle je do sablony. A v sablone by mela byt moznost a-z nebo z-a. Chtěl bych volat defaultni metodu renderFirmy jako predtim, ale aby mi dala srovnane nazvy. Jak na to, prosim? díky
- Šaman
- Člen | 2667
- Musí to umět metoda
$firmyRepository->findPublishedArticles()
. Musí být schopná akceptovat nějaký parametr řazení. public function renderFirmy(int $page = 1, string $sort = 'ASC')
– tím zajistíš, že render metoda bude schopná přijmout parametr o řazení. Obecně by možná bylo lepší použítbool
a zpracovat to trochu univerzálně, ale celý ten kód je jednoduchý, tak by tohle mohlo stačit.- Informaci o řazení si předáš do šablony
$this->template->sort = $sort;
- Do odkazů ke změně řazení přidáš natvrdo
parametr.
<a n:href="Firmy:firmy, page: 1, sort: ASC">a-z</a>
- Do odkazů ke stránkování přidáš aktuální řazení, které šabloně
předal
presenter
<a n:href="firmy, $paginator->getPage() + 1", $sort>Další</a>
- Změna řazení takhle vynuluje stránkování, což je asi dobře (pokud se změní řazení, je irelevantní na které stránce jsme byli).
- K udržení informaci o řazení se dá využít perzistentní parametr, ale pro začátek si můžeš tuto informaci předávat takto sám, aspoň pochopíš jak to funguje. Žádná magie.
- Ideální je tohle dělat ajaxově, ale to vše taky až pochopíš jak a proč to funguje tímto způsobem. Ajax je další level ve složitosti.
- Prakticky jsou na tohle ale už hotové Datagridy, které za tebe udělají strašně moc otrocké práce.
Editoval Šaman (13. 1. 2021 7:05)
- David Matějka
- Moderator | 6445
Jen doplním, že
Do odkazů ke stránkování přidáš aktuální řazení, které šabloně předal presenter <a n:href=„firmy, $paginator->getPage() + 1“, $sort>Další</a>
není potřeba. jelikož je ten parametr uveden v signatuře té render metody, tak je persistentní pro danou akci.
Na druhou stranu bych pro přehlednost (aby to nebylo pozičně závislé) používal pojmenované parametry pro stránky:
- Kamil Valenta
- Člen | 835
David Matějka napsal(a):
jelikož je ten parametr uveden v signatuře té render metody, tak je persistentní pro danou akci.
Tý jo, tohle jsem sám netušil. Je to někde zdokumentováno?
- David Matějka
- Moderator | 6445
@KamilValenta nevím, možná, že neni. jo zapomněl jsem zmínit,
že je potřeba odkazovat přes this
a ne přes název akce.
- Kamil Valenta
- Člen | 835
David Matějka napsal(a):
@KamilValenta nevím, možná, že neni. jo zapomněl jsem zmínit, že je potřeba odkazovat přes
this
a ne přes název akce.
Aha, tak to pak jo. S this ano.
- tomas_straka
- Člen | 32
Diky vsem za rady, funguje. Jeste bych mel dotaz…kdyz inicializuji promennou v hlavicce metody napr. "public function renderFirmy(int $page = 1), tak kdyz do te metody poslu neco jineho, tak se tam misto $page= 1 vlozi treba 4? Neprepise se mi to? Diky
- tomas_straka
- Člen | 32
Diky. A jeste bych se zeptal, proc do te sablony posilas $this->template->sort = $sort; ? Nevidim pro to vyuziti.