Nastavení filtru vyhledávíní z komponenty do presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
besir
Člen | 170
+
0
-

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
+
0
-

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é.

besir
Člen | 170
+
0
-

Vidis, to s tema mailama me vubec nedoslo :-/ No a co se tyka toho presmerovani tak

$this->presenter->redirect(200, 'Properties:search', $args);

??

Patrik Votoček
Člen | 2221
+
0
-

Jenom v bodech:

  • persistentní komponenta formuláře
  • GET metoda formuláře
  • akce formuláře směrující na daný presenter
besir
Člen | 170
+
0
-

Jak vytvořím persistentní komponentu? Není tím zamýšleno to samé co psal @pawouk ? Tedy vytvořit jí v BasePresenteru?

besir
Člen | 170
+
0
-

No tak kdyz dam

$form->setAction($this->link('Properties:search'));

tak mi to ve formulari odkazuje porad na aktualni stranku :-(

Ot@s
Backer | 476
+
0
-

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
+
0
-

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)