Jak na stránkování

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

Zdravím,
je někde nějaký příklad s jednoduchým výpisem novinek a stránkováním za použítí VisualPaginatoru? Dlouho si s tím hraju a nemůžu to slepit dohromady. Ani takový quickstart mi nepomohl. Prostě vubec nevíím jak to stránkování udělat. Potřeboval bych nějaký ten „best practice“ po lopatě. :-D

Díky za každou odpověď.

Majkl578
Moderator | 1364
+
0
-

příklad jak to řeším já za použití dibi & DibiDataSource (viz pojem DRY zde indexu)

.....
presenter:

//akce presenteru
public function actionArticles()
{
	$dataSource = dibi::select('*')
				->from('[clanky]')
				->orderBy('[id]')
				->desc()
				->toDataSource();//vytvoříme si datasource [tohle by mělo být v modelu, ale pro jednoduchost ukázky to je zde]

	$vp = new VisualPaginator($this, 'paginator'); //vytvoříme komponentu s názvem `paginator`
	$vp->paginator->itemsPerPage	= 10; //nastavíme zobrazení deseti položek na stránku
	$vp->paginator->itemCount	= $dataSource->count(); //řekneme paginátoru kolik máme celkem položek

	$this->template->articles	= $dataSource->applyLimit($vp->paginator->itemsPerPage, $vp->paginator->offset)->fetchAll(); //získáme požadovaná data

}

příslušný soubor template:

<div id="articles">
	<div n:foreach="$articles as $article">
		{*... zde vykreslíme články*}
	</div>
</div>

{control paginator}{*a takhle vykreslíme VisualPaginator*}

Editoval Majkl578 (26. 8. 2009 19:28)

Panda
Člen | 569
+
0
-

pjoter napsal(a):

Fatal Error
Class ‚VisualPaginator‘ not found

?

Máš stažený VisualPaginator? Máš ho ve správné složce? Používáš RobotLoader?

sodae
Nette Evangelist | 250
+
0
-
Majkl578
Moderator | 1364
+
0
-

??? co to jako má být? smazaný příspěvek? byl bych pro, aby nešlo mazat příspěvky, které nejsou v tématu poslední

JakubKohout
Člen | 92
+
0
-

Ten příklad co psal Majkl bohužel nefunguje pokud se snažíte udělat VisualPaginator v nějaké componentě (nebo aspoň mě to nefungovalo), proto sem to udělal přímo jako widget.

/* Render v componente */
    public function render(){
	... //vytvoří template
        $dataSource = $this->model->getMessages($this->id);
        $this['visualPaginator']->paginator->itemsPerPage = 10;
        $this['visualPaginator']->paginator->itemCount = $dataSource->count();

        $template->messages = $dataSource->applyLimit($this['visualPaginator']->paginator->itemsPerPage, $this['visualPaginator']->paginator->offset)
        									->fetchAll(); //Get data

	... //Zbytek jako vykreslení formuláře
    }

Potom si v daný componentě pomocí továrničky zaregistruji visualPaginator

function createComponentVisualPaginator($name){
	$vp = new VisualPaginator($this,$name);
}

V template daný componenty akorát zavolám

{control visualPaginator}