#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

vrtak-cz
NDP guru
Místo: Praha/Ústí nad Orlicí
Registrovaný: 8. 3. 2008
Příspěvky: 964
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?

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

 

#13 17. 2. 2010 14:20

PetrP
Moderator
Místo: Praha
Registrovaný: 15. 7. 2008
Příspěvky: 612
Web

Re: VisualPaginator se nechce vykreslit

DibiFluent count má (viz zde). Problém bude tedy jinde. Tvoje řešení není moc ideální z pohledu výkonu.

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

 

Zápatí