Nastavení filtru vyhledávíní z komponenty do presenteru
- besir
- Člen | 170
Ahoj, řeším následující problém a nevím jaká by byla best practise a vůbec čisté řešení.
Obrázek požadavku:
http://imageshack.us/…sign02r.jpg/
Problém:
Vyhledávací formulář který je na obrázku má být dostupný po celé
šíři webu. Jenže při jeho odesílání bych potřeboval aby se výsledky
filtrování zpracovali v PropertiesPresenter. Ten následně obslouží
získání dat z modelu, vytvoření komponenty paginator atd.
Dalším „problémem“ je to, žeby si control s formulářem měl pamatovat, nebo získat také odeslané hodnoty a formulář v něm by měl zůstat strnulý, tedy nastavený podle odeslaných hodnot.
No a do třetice je zde filtr zobrazených položek. Při jeho změně by se měl samozřejmě vyhledávaný dotaz také uchovat jen změnit počet zobrazených položek.
Moje řešení:
S tímto mě napadá pouze jedno řešení, odeslat formulář do jejího
controlu, tam sestavit a uložit session s daty a následně přesměrovat na
PropertiesPresenter který by dotaz skládal ze session a jejího posledního
záznamu. Posledního záznamu proto, že klient chce uchovávat pro
návštěvníky jejich podlesní sestavy vyhledávání.
Co si o tomto řešení myslíte? Je to vůbec z hlediska návrhu správně? Díky, Besir.
- pawouk
- Člen | 172
Do BasePresenteru uděláš createComponentSearchform()… ten by mohl přesměrovávat na tvuj PropertiesPresenter. Ale data bych určitě nedával do session, ale normálně do url. Ideálně se k tomu hodí persistent parametery (ty si nette pamatuje a přenáší je práve v url). Hlavním důvodem proč to dávat do url a ne sesion je to že výsledek vyhledávání se klidně může posílat mailem jako odkaz a ten by rozhodně měl ukazovat pokaždé to samé.
- Patrik Votoček
- Člen | 2221
Jenom v bodech:
- persistentní komponenta formuláře
- GET metoda formuláře
- akce formuláře směrující na daný presenter
- Ot@s
- Backer | 476
besir napsal(a):
No tak kdyz dam
$form->setAction($this->link('Properties:search'));
tak mi to ve formulari odkazuje porad na aktualni stranku :-(
Chybí tam parametr na vyvolání události:
protected function createComponentForm($name) {
$form = new Form($this, $name);
$form->setAction($this->link('Properties:search'), array("do" => $name."-submit"));
// ...
}
Edit: raději koukni do zdroje, jak správně vygenerovat vlastní parametr do
Editoval Ot@s (23. 9. 2012 23:12)
- Jan Voráček
- Člen | 90
Přispěji svou troškou do mlýna. Používám formulář připojený
v BasePresenteru a v jeho zpracování přesměruji na příslušný presenter
s danými argumenty. Ve spojení se šikovně nastaveným routerem se z toho
dají udělat pěkné URL.
Například /pneumatiky/michelin/nove/letni
Živá ukázka: www.pneu-kusovky.cz
Editoval Jan Voráček (25. 9. 2012 9:35)