#1 2. 2. 2010 0:50
- weckho
- Člen
- Registrovaný: 14. 7. 2009
- Příspěvky: 99
VisualPaginator se nechce vykreslit
Ahoj,
nechce se mi v šabloně vykreslit VisualPaginator, v presentru mám:
public function renderDefault()
{
$data = new Data;
$dataSource = $data->findAll()->orderBy('date', 'ASC');
$vp = $this->getComponent('paginator')->paginator;
$vp->itemsPerPage = 3; //nastavíme zobrazení tří položek na stránku
$vp->itemCount = count($dataSource); //řekneme paginátoru kolik máme celkem položek
$dataSource->offset($vp->offset);
$dataSource->limit($vp->itemsPerPage);
$this->template->data = $dataSource->fetchAll();
}
protected function createComponent($name)
{
switch ($name) {
case 'addForm':
//Nějaký form.
return $form;
case 'paginator':
$vp = new VisualPaginator($this, $name);
return $vp;
default:
parent::createComponent($name);
}
}
V šabloně potom:
{control paginator}
Data se vykreslí (dle zadaného limitu), ale stránkování ne. Pokud do URL přidám ?page=2, dostanu stejná data jako bez tohoto parametru.
Děkuji.
Offline
#2 3. 2. 2010 23:51
- weckho
- Člen
- Registrovaný: 14. 7. 2009
- Příspěvky: 99
Re: VisualPaginator se nechce vykreslit
Opravdu nikdo neví, v čem by mohla být chyba?
Offline
#3 4. 2. 2010 9:22
- David Grudl
- Administrator

- Registrovaný: 8. 2. 2005
- Příspěvky: 4236
- Web
Re: VisualPaginator se nechce vykreslit
Zeptám se na něco jiného ;) Snažil jsem se už dávno na fóru a webů důsledně zlikvidovat zmínky o továrničkách řešených přes switch. Kde na to pořád chodíte?
Offline
#4 4. 2. 2010 9:47
Re: VisualPaginator se nechce vykreslit
David Grudl napsal(a):
Zeptám se na něco jiného ;) Snažil jsem se už dávno na fóru a webů důsledně zlikvidovat zmínky o továrničkách řešených přes switch. Kde na to pořád chodíte?
Mám takové tušení že to berou z example DataGridu
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“
Offline
#5 4. 2. 2010 11:36
- romansklenar
- Moderator

- Místo: Ostrava
- Registrovaný: 20. 7. 2008
- Příspěvky: 774
- Web
Re: VisualPaginator se nechce vykreslit
To by možná stálo za to změnit.
Offline
#6 4. 2. 2010 11:36
- weckho
- Člen
- Registrovaný: 14. 7. 2009
- Příspěvky: 99
Re: VisualPaginator se nechce vykreslit
Mám to myslim tady z fóra :) Není problém to předělat, je ale problém v tom? Nebo předělání nebude mít na vykreslení VisualPaginatoru vliv?
Díky za odpověď.
Offline
#7 5. 2. 2010 19:25
- weckho
- Člen
- Registrovaný: 14. 7. 2009
- Příspěvky: 99
Re: VisualPaginator se nechce vykreslit
Tak už vím kde je chyba, ale nevím proč..
$vp->itemCount = count($dataSource);
Count vrací 1, namísto správného počtu záznamů v DB, kterých je asi 13. Když tam dosadím natvrdo číslo, vše funguje jak má:
$vp->itemCount = 13;
Čím by to mohlo být?
Offline
#8 5. 2. 2010 20:07
- redhead
- Nette guru
- Registrovaný: 2. 5. 2009
- Příspěvky: 768
Re: VisualPaginator se nechce vykreslit
pokud se jedná o DibiDataSource, tak spíš
$dataSource->count();
ne?
Offline
#9 5. 2. 2010 20:22
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1410
- Web
Re: VisualPaginator se nechce vykreslit
Měla by fungovat i první varianta.
Nevoláš na něj ten count až po applyLimit? :)) Zkus si dumpnout fetchAll().
Editoval Ondřej Mirtes (5. 2. 2010 20:23)
Offline
#10 5. 2. 2010 21:12
- weckho
- Člen
- Registrovaný: 14. 7. 2009
- Příspěvky: 99
Re: VisualPaginator se nechce vykreslit
Nevolám, respektive nevolám applyLimit vůbec, protože používám dibiFluent, takže jen limit, kód je takový:
$data = new Data;
$dataSource = $data->findAll()->orderBy('date', 'ASC');
$vp = $this->getComponent('paginator')->paginator;
$vp->itemsPerPage = 3; //nastavíme zobrazení tří položek na stránku
$vp->itemCount = count($dataSource); //řekneme paginátoru kolik máme celkem položek
$dataSource->offset($vp->offset);
$dataSource->limit($vp->itemsPerPage);
$this->template->data = $dataSource->fetchAll();
Záznamy se mi normálně vypíšou všechny.. mám fetchAll až na konci a count volám předtím (i před tím limitem), takže ty záznamy v $dataSource normálně jsou.
Děkuji.
Offline
#11 5. 2. 2010 21:15
- Ondřej Mirtes
- Moderator

- Místo: Praha
- Registrovaný: 8. 1. 2009
- Příspěvky: 1410
- Web
Re: VisualPaginator se nechce vykreslit
Tak proč nazýváš proměnnou $dataSource, když to není DataSource?
Nejsem si jistý, jestli se dá na objekt DibiFluent volat count(), aby vrátil počet položek, ale to už bych kecal, nikdy jsem DibiFluent nepoužíval.
Offline
#12 5. 2. 2010 21:23
- weckho
- Člen
- Registrovaný: 14. 7. 2009
- Příspěvky: 99
Re: VisualPaginator se nechce vykreslit
Nevěděl jsem, jak jinak to nazvat, každopádně jsem se na ten count díval hlouběji a takhle to jede:
$vp->itemCount = count($dataSource->execute()); //řekneme paginátoru kolik máme celkem položek
Takže vyřešeno, díky moc všem za pomoc!
Offline
#14 18. 2. 2010 21:48
- Honza Marek
- Moderator

- Místo: Kladno
- Registrovaný: 31. 3. 2007
- Příspěvky: 1298
- Web
Re: VisualPaginator se nechce vykreslit
David Grudl napsal(a):
Zeptám se na něco jiného ;) Snažil jsem se už dávno na fóru a webů důsledně zlikvidovat zmínky o továrničkách řešených přes switch. Kde na to pořád chodíte?
U toho paginatoru bych se tomu vůbec nedivil. Chtěl jsem to opravit, ale nemám oprávnění editovat stránku.
Offline


