VisualPaginator nevidí proměnnou z URL
- David Klouček
- Člen | 57
Č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
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
Presenter
u, ale jedná se o @persistent
atribut
VisualPaginator
u. Tedy se IMHO vloží přímo do
public $page;
atributu paginatoru a už se neobjevuje nikde v
Presenter
u.
Obecně by se tak dalo říct, že atributy komponent se vkládají přímo
ke každé komponentě a neobjevují se v Presenter
u, protože
Presenter
je v podstatě jen (dost) speciální komponenta.
- David Klouček
- Člen | 57
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
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
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
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ě.