Stránkování výsledku vyhledávání
- Jiří Nápravník
- Člen | 710
Jak řešíte případ, kdy potřebujete například stránkovat vyhledívíní. Mám osekaně něco takového:
class Controller
{
protected function createComponentPhotoSearch()
{
return new PhotoSearch();
}
}
class PhotoSearch extends Control
{
public $searched;
protected function createComponentForm()
{
$form = new Form;
$form->onSuccess[] = $this->proccess;
}
public function process($form){
$this->searched = $form->getValues();
}
protected function createComponentPaginator()
{
$vp = new VisualPaginator();
return $vp;
}
public function render()
{
$p = $this['paginator']->paginator;
$p->setItemCount(5);
$p->setItemsPerPage(1);
$this->template->number = $this->numbers[$p->getOffset()];
$this->template->setFile(__DIR__ . '/test.latte');
$this->template->render();
}
}
No a samozřejmě když u stránkovače kliknu na jinou stránku tak už se zapomene ten filtr a je to fuč. Jak to řešit? Nabízí se samozřejmě na první ránu persistentní parametr, kam uložím ty filtry. Ale Přeci jen těch filtrů pokud je mnoho, tak samozřejmě celkem brutálně až do stovek znaku naroste URL. Není něco lepšího? Nabízí se samozřejmě i SESSION, ale ta není ideální v tomhle případe, protože na ten stav nemůžu nikdy odkázat.
- Jan Suchánek
- Člen | 404
@Jiří Nápravník: Můžeš použít i persistentní komponentu. To je pak to pravé, hlavně s ajaxem je to pak super.
Editoval jenicek (10. 1. 2014 15:28)
- Jiří Nápravník
- Člen | 710
Ok, takže mi asi nic jiného nezbude, než ty persistentní parametry. Ale nedá mi to, to nijak neřešíte, že ta adresa s filtry pak hooodně bobtná? Ale ono asi nic lepšího stejně není…
@jenicek můžeš trochu rozvést? O persistentních komponentách jsem našel v dokumentaci jen odstavec a nějak moc nechapu vůbec, v čem by mi to mělo omoci a jaké je užití
- akadlec
- Člen | 1326
@mkoubik: u ajaxového požadavku by to zas tak jedno být nemělo, protože pokud to chceš udělat dobře tak bys měl updatovat url adresu tak aby uživatel mohl třeba danou stránku s výsledky poslat někomu dalšímu.
@Jiří Nápravník: co je za problém že budeš mít v url parametry filtru? To že url bobtná je nějaký problém?
- Oli
- Člen | 1215
Pokud je bobtnající url nějak zvlášť velký problém, tak můžeš pro každý hledání vytvářet hash, kterou si s konkrétníma parametrama (vyhledávání a stránkování) uložíš do databáze. Udělat si takovej vlastní zkracovač URL. Pak není problém dosáhnout třeba 5 místné url za doménou.
Záleží ale hlavně na používání aplikace (10 lidí denně nebo 10000 denně) a na tom jak je dlouhá URL velkej problém…
- Jan Suchánek
- Člen | 404
Jiří Nápravník: hele mam komponentu na vlastni grid
A chci mit form na ovlivnovani vysledku, nejakej search form plus neco dalsiho
a vse zvlast a ajaxem a chci, aby si to vzdy pamatovalo kde sem byl co sem
naposled upravoval atp. A neresim to pomoci cookie ani session, pouzil jsem
persistent komponenty a celkem to maka.
Mozna blbnu zkusim ti zejtra pripravit priklad jo? Zajimal by me nazor ale musim odladit kod at se ta nej nestydim :).
- Jiří Nápravník
- Člen | 710
ad bobtanající url – díky za názory – mě šlo o to, když těch možností filtrů je hodně, tak pak je adresa třeba v mail klientu i na několik rádků, což moc hezky nevypadá, v otm případě je asi lepší ten hash jak zminujete. Ale kdyz bude mensi filtr, tak to moc nema smysl resit.
jenicek no co ja jsem pochopil, tak tyhle persistentni komponenty, zustavaji stejne i kdyz jdu na jiny presenter. Takze by to melo uziti napriklad kdyz mas ten grid a pak kliknes na edit a chces se pak vratit odkazem (ne back buttonem) tak bys mel pak mit tu komponentu stejnou jako když jsem ji opustil. Chápu dobře? příklad by byl fajn, ale kvůli mě ho nedělej:-)
- Oli
- Člen | 1215
jen u té hashe je fajn, když ju máš uloženou v db „navěky“. Když jsem třeba někde potřeboval dát odkaz na vyhledanou firmu na justice.cz, tak jsem po asi týdnu zjistil, že to hledání má jen dočasnou platnost…
- Jan Suchánek
- Člen | 404
@Jiří Nápravník: přesně tak jen já sem ty persistentni komponenty nepoužíval a ted mi prijdou super :)