Nette 2.1 – nefunkční VisualPaginator

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

Zdravím,
již jsem dosti zoufalý. Po upgradu na Nette 2.1, přepsání a přegenerování projektu mi přestali fungovat všechny VP. Jako addon používám tento kód VisualPaginatoru.

Situace je aktuálně taková: po klepnutí na číslo v paginatoru na stránce se nestane nic, jen se do URL přidá ..?pageChooser-page=2
Poznámka: před přechodem na Nette 2.1 vše fungovalo. Pro test jsem též vykopal pryč všechny AJAXy. Metody databází prověřeny – fungují.

Kód paginatoru v presenteru:

***

public function actionDefault()
{

        $paginator = $this['pageChooser']->getPaginator();
        $paginator->setItemsPerPage($this->itemsPerPage);
        $paginator->setItemCount($count);

        $customers = $CustomersManager->getOffsetData($paginator->getItemsPerPage(),
 $paginator->getOffset());
}

***

protected function createComponentPageChooser($name)
{
        return new \TachoScan\Addons\VisualPaginator($this, $name);
}

***

Editoval dog.big (21. 1. 2014 16:16)

David Matějka
Moderator | 6445
+
0
-

„nic se nedeje“ znamena, ze se to chova, jako by to bylo stale na prvni strance?

co se stane, kdyz dumpnes $paginator->page, pripadne $this['pageChooser']->page?

dog.big
Člen | 49
+
0
-

Ano, vše vypadá že jsme stále na první stránce. V URL je ?pageChooser-page=2, avšak dump navrací stále jedničku. VisualPaginator nenastavuje zřejmě paginatoru správné číslo.. :/

craz
Člen | 34
+
0
-

Podarilo sa niekomu prist na to, kde moze byt chyba?

akadlec
Člen | 1326
+
0
-

Tak jako hlavní problém bych viděl:

$paginator->setItemCount($count);

a to že není definovaná proměnná $count.

Já visuální paginator mám ve tvaru jak je zde uvedeno a žáden problém to nedělá. Takže by si to chtělo projít co se v něm děje.

dog.big
Člen | 49
+
0
-

Právě že jsou zde „Dva“ tábory, jednomu vp jde a druhému ne. Osobně se mi nedaří najít část kódu, která opravdu poté paginatoru nastaví danou stránku po interakci s visual paginatorem…

akadlec
Člen | 1326
+
0
-

A co ta proměnná count ?

Jiří Nápravník
Člen | 710
+
0
-

Podle mě to máš dobře, a na tohle:

$paginator->setItemCount($count);

prostě tam nastav počet prvků, přes které má paginator jet, tedy například počet všeho zboží v eshopu.

dog.big
Člen | 49
+
0
-

Zdravím, zapomněl jsem dopsat, toto $count = $CustomersManager->count() tam mám :), po dumpu se úkáže 983. Tam problém není, navracím se k VP, kde stále hledám ten kód, který by měl nastavovat danou stránku paginatoru.

+ mě děsí to, že nikde nevidím volání kódu $paginator->setPage($page)

Editoval dog.big (30. 1. 2014 14:14)

honos
Člen | 109
+
0
-

dog.big napsal(a):

+ mě děsí to, že nikde nevidím volání kódu $paginator->setPage($page)

api?

dog.big
Člen | 49
+
0
-

Ano v API je, ale kde ve VP je uvedené volání API?

David Matějka
Moderator | 6445
+
0
-

@dog.big: koukni tam do metody loadState, tam se page nastavuje

honos
Člen | 109
+
0
-

dog.big napsal(a):

Ano v API je, ale kde ve VP je uvedené volání API?

Jsou tam použity magické metody takže místo $this->setPage(...) se vola $this->page = ...

dog.big
Člen | 49
+
0
-

problém je ten, že ona proměnná page pro $this->setPage(…) se sem nedostane (stále je v 1) i když v URL je. Jak ji tam dostanu?

Jan Suchánek
Člen | 404
+
0
-

dog.big: $paginator->page najdeš ho přímo v komponentě VP zde. Ale zajímal by mě důvod, proč ho chceš měnit, když si číslo stránky nastavuje přímo sama komponenta pomocí persistentního parametru $page.

honos
Člen | 109
+
0
-

Musel jsem prepsat nejaky namespace ale jinak to pod NETTE 2.1 bezi na vybornou..

Tirus91
Člen | 199
+
0
-

Mne osobně to také běží v pořádku

	$comments = $this->database->query('SELECT * FROM article_comments WHERE article_post_id = %i', 	$storyId, ' ORDER BY created_at DESC');

$result['count'] = count($comments);
$vp = new \VisualPaginator\VisualPaginator($presenter, 'commentPaginator');
$paginator = $vp->getPaginator();
$paginator->itemsPerPage = $limit;
$paginator->itemCount = $result['count'];
$result['values'] = $comments->fetchAll($paginator->offset, $paginator->itemsPerPage);
return $result;

a to sem neupravoval žádný namespace a nic ;)

Editoval Tirus91 (5. 3. 2014 10:57)

LamA.nOOb
Člen | 1
+
0
-

Pokud je to stále aktuální, tak jsem momentálně řešil stejný problém a objevil jsem, že v šabloně visual paginatoru (podle vloženého odkazu je to „template.phtml“) je potřeba pro generování odkazů využít makro {plink , NE {link (v mém případě to bylo:

{if $paginator->pageCount > 1}
<ul class="pagination">
	<li {if $paginator->isFirst()}class="disabled"{/if}><a href="{plink this, 'page' => $pageMin}">&laquo;</a></li>
	{foreach $steps as $step}
	<li {if $step == $paginator->page}class="active"{/if}><a href="{plink this, 'page' => $step}">{$step}</a></li>
	{if $iterator->nextValue > $step + 1}
	<li><span>...</span></li>
	{/if}
	{/foreach}
	<li {if $paginator->isLast()}class="disabled"{/if}><a href="{plink this, 'page' => $pageMax}">&raquo;</a></li>
</ul>
{/if}

Editoval LamA.nOOb (22. 10. 2014 1:23)