VisualPaginator se nechce vykreslit

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

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.

weckho
Člen | 94
+
0
-

Opravdu nikdo neví, v čem by mohla být chyba?

David Grudl
Nette Core | 8227
+
0
-

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?

Patrik Votoček
Člen | 2221
+
0
-

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

romansklenar
Člen | 655
+
0
-

To by možná stálo za to změnit.

weckho
Člen | 94
+
0
-

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ěď.

weckho
Člen | 94
+
0
-

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?

redhead
Člen | 1313
+
0
-

pokud se jedná o DibiDataSource, tak spíš

$dataSource->count();

ne?

Ondřej Mirtes
Člen | 1536
+
0
-

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)

weckho
Člen | 94
+
0
-

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.

Ondřej Mirtes
Člen | 1536
+
0
-

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.

weckho
Člen | 94
+
0
-

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!

PetrP
Člen | 587
+
0
-

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

Honza Marek
Člen | 1664
+
0
-

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.