Stránkování výsledku vyhledávání

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

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.

David Matějka
Moderator | 6445
+
0
-

urcite pouzij persistentni parametry

mkoubik
Člen | 728
+
0
-

A po POST requestu (pokud není AJAXový) přesměrovávej.

Jan Suchánek
Člen | 404
+
0
-

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

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í

mkoubik
Člen | 728
+
0
-

Díky routování není důvod proč nemít URL třeba ve tvaru /search/hledany-vyraz/3 (a pří AJAXovém požadavku je to úplně jedno).

Editoval mkoubik (10. 1. 2014 17:25)

akadlec
Člen | 1326
+
0
-

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

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

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

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

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

@Jiří Nápravník: přesně tak jen já sem ty persistentni komponenty nepoužíval a ted mi prijdou super :)