Jak na stránkování
- Ondřej Kubíček
- Člen | 494
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
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)
- JakubKohout
- Člen | 92
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}