VisualPaginator nevidí proměnnou z URL

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

Čau, potřeboval bych poradit, proč Visual Paginator přehlíží číslo stránky v URL.

Mám presenter Page a akce default a detail. U obou akcí se v layoutu vypisují položky z DB, ale jen při akci default má být aplikace schopná udržet stav stránkování (číslo, řazení).

Výpis mám udělaný přes komponentu, ve které vytvářím nový VisualPaginator:

$vp = new \VisualPaginator($this, 'vp');

Takže očekávám, že by mělo být číslo stránky v proměnné vp-page, ale aplikace se chová, jako by tam nebyla, i když v debug baru je.

Když si pak vypíšu $presenter->getParameter() a nebo GET proměnné požadavku, nikde vp-page neni. Kde může být problém?

stekycz
Člen | 152
+
0
-

Píšu sice jen svou domněnku, ale předpokládám, že by se nemusela od pravdy moc lišit.

Podle mě jde o to, že vp-page není parametrem Presenteru, ale jedná se o @persistent atribut VisualPaginatoru. Tedy se IMHO vloží přímo do public $page; atributu paginatoru a už se neobjevuje nikde v Presenteru.

Obecně by se tak dalo říct, že atributy komponent se vkládají přímo ke každé komponentě a neobjevují se v Presenteru, protože Presenter je v podstatě jen (dost) speciální komponenta.

pawouk
Člen | 172
+
0
-

Počkej takže jako že v $_GET neni a v debugbaru je? To je asi blbost ne?

David Klouček
Člen | 57
+
0
-

pawouk napsal(a):

Počkej takže jako že v $_GET neni a v debugbaru je? To je asi blbost ne?

Přesně, dump($_GET) = array(0), ani když zkusim https://doc.nette.org/cs/http/request#… tak tam neni. V paginatoru jsem upravil akorát odkazy:

{plink Page:default, 'order' => 'x', 'vp-page' => $step}

Routy vypadaj takhle:

$container->router[] = new Route('[<order x|y|z>/][stranka/<vp-page>]', 'Front:Page:default');
$container->router[] = new Route('item/<id [0-9]+>', 'Front:Page:detail');

Při obouch akcích se odkazy na stránky vytvářej dobře, akorát paginator je furt na první stránce i když je v URL číslo jiný stránky. Paginator normálně vypisuje 3 stránky (5 záznamů s limitem 2 na stránku).

David Klouček
Člen | 57
+
0
-

Nevím jestli je to hezké řešení, ale potřeboval jsem to rozchodit. Takže jsem se kouknul kde debugbar bere ty hodnoty a udělal to stejně:

$params = $this->request->getParameters();
.. = $params['vp-page'];
zopper
Člen | 20
+
0
-

Jak napsal stekycz, ten parametr se předá přímo do paginatoru, v presenteru se k němu čistě nedostaneš – ale hlavně to ani nepotřebuješ! Pokud chceš číslo aktuální stránky, použij paginátor ;-)

<?php
$page = $vp->getPaginator()->page;
/* Nebo tak něco, píšu to z hlavy -
 * getPaginator() vrací standardní Paginator z Nette, takže se když tak podívej do dokumentace.
 */
?>
Marax
Člen | 28
+
0
-

pawouk napsal(a):

Počkej takže jako že v $_GET neni a v debugbaru je? To je asi blbost ne?

Setkal jsem se s tím že $_GET[] nic nevracelo, už si nepamatuji čím to nakonec bylo, ale myslím že nastavením serveru. Nette to ale nevadí, protože si ty parametry vytahuje samo z url z $_SERVER. Pokud se mýlím opravte mě.