Paginator – na poslední stránku

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

Zdravím, řeším teď fórum a zasekl jsem se na následujícím problému.
Potřebuju k výpisu témat přidat možnost jít rovnou na poslední stránku.

V API jsem bohužel nenašel metodu, která by dokázala paginator přesměrovat rovnou na poslední na poslední stránku, tak jsem to chtěl vyřešit předáním druhýho parametru v URL. A tak vzniklo toto:

public function renderTopic($id,$where) {
          ....
          if ($where == 'last') {
           $paginator->setPage($paginator->getLastPage());
          ....
         }

Což udělá to co má (nahodí poslední stránku), akorát že ten parametr where potom zůstane v URL a tudíž nefunguje další stránkování :)
Chci se tedy zeptat jak na to? Nejlíp by se mi hodilo, kdybych mohl ten parametr v URL po použítí nějak odstranit, bohužel mě nenepadá jak na to.
Nebo máte někdo nějaký jiný řešení?

uestla
Backer | 799
+
0
-

A aktuální stránku si uchováváš kde? V persistentním parametru? Proč by mělo vadit odkazu na poslední stránku nastavit právě tenhle parametr na $paginator->lastPage ?

Proloo
Člen | 24
+
0
-

No aktuální stránka právě není. Možná jsem to napsal blbě.
Ve výpisu témat potřebuju u každýho tématu přidat možnost jít rovnou na konec příspěvků v tom tématu (tedy na poslední stránku v paginatoru). V tom výpisu témat samozřejmě ještě nevím jaká je poslední stránka v každém tématu a přesto se na tu stránku chci z tohoto tématu dostat.
Jinak si číslo stránky samozřejmě uchovávám normálně v ?paginator-page=2

A bohužel do tohoto parametru nemůžu zadat text (last třeba a potom v presenteru vyhodnotit a nastavit poslední stránku), můžu tam zadat jen čísla.

Nebo jak jinak se to dá udělat? Například tak jak je to tady na fóru.
Aniž bych musel u každýho tématu v kategorii chodit do databáze, počítat příspěvky, dělit,…

Editoval Proloo (13. 6. 2012 22:02)

llook
Člen | 407
+
0
-

To, co radí uestla, je abys v šabloně z objektu stránkovače získal číslo poslední stránky a to použil pro tvorbu odkazu:

<a n:href="this paginator-page => $paginator->lastPage">Poslední stránka</a>

Pokud chceš, aby existovalo jedno URL, na kterém vždy najdeš poslední stránku (jako „nejnovější příspěvky“ na tomto fóru), tak můžeš jít cestou signálu:

public function handleGoToLastPage()
{
	$this->paginator->page = $this->paginator->lastPage;
}
<a n:href="goToLastPage!">Poslední stránka</a>
Proloo
Člen | 24
+
0
-

Možná že vás oba nechápu, nebo nechápete to co potřebuju. Ale obě dvě možnosti jsou použitelné pouze na tom výpisu příspěvků – tam budu mít stránkovač a můžu s ním nějak pracovat. Stejně tak tam můžu použít ten signál.
Jenže já se na tu poslední stránku ve výpisu příspěvků potřebuju dostat přímo z výpisu témat.

Jednoduše řečeno – když to zjednoduším a trochu změním, potřebuju abych měl ve výpisu témat jako je zde – https://forum.nette.org/…-dokumentace
Možnost jít rovnou na jednotlivé stránky, nebo i klidně jen na tu poslední (to tučně): Nový Quickstart – diskuze od Panda [ 1 2 ]

A to bez toho, aniž bych musel ve výpisu těch témat počítat počty příspěvků ve všech těch tématech. Proto mluvím od začátku o tom dostat se rovnou na poslední stránku, to by mi uplně stačilo, jenže nemůžu přijít na způsob jak – protože pokud to dělám druhým parametrem v URL (první je ID toho tématu), tak ten parametr v té URL zůstane a tudíž nejde potom stránkovat v tom tématu.

Editoval Proloo (14. 6. 2012 11:18)

bazo
Člen | 620
+
0
-

bez toho, aby si pocital prispevky to ale fakt nepojde.

Proloo
Člen | 24
+
0
-

Dobrá a lze tedy nějakým způsobem udělat, abych jen mohl jednoduše přejít rovnou na tu poslední stránku nějaký parametrem navíc (to není problém, to mám a je to docela jednoduchý)?
A poté tento parametr zrušit (to už je problém a ať dělám co dělám, nevím jak na to)?
Zkoušel jsem nějakým způsobem upravit template.phtml u VisualPaginatoru.
Mám tam tohle:

<a href="{link this, 'page' => $paginator->page - 1}">« Předchozí</a>

Když to upravím takhle:

<a href="{link this, 'page' => $paginator->page - 1, 'where' => NULL}">« Předchozí</a>

a do presenteru přidám:

 /**
 * @persistent
 * @var string
 */
public $where;

Tak se vůbec nic nestane a ten parametr where tam dále zůstává.

Editoval Proloo (14. 6. 2012 13:56)

bazo
Člen | 620
+
0
-

ano, vyratas si ktora stranka je posledna a potom si toto cislo posles v url

Proloo
Člen | 24
+
0
-

No asi mic nic jinýho nezbyde, ale připadá mi to zbytečný kvuli odkazu (kterej by klidně mohl být naprosto obecnýho tvaru) počítat při generování každé stránky 20× (počet témat na stránce) počet příspěvků v každým tématu.

Proto jsem to chtěl nějakým způsobem zjednodušit.

Teda pokud to nechci dělat stylem „na prase“, kdy bych tam jednoduše hodil nějakej nesmysl typu stránka 9999999, což by účel splnilo (hodilo mě to na poslední stránku a dál mi to nepřekáželo).

Editoval Proloo (14. 6. 2012 14:07)

bazo
Člen | 620
+
0
-

tak potom vloz do odkazu parameter page=last a podla toho si vyratas poslednu stranku a otvoris ju. nechapem co tu stale riesis za komplikovanosti

voda
Člen | 561
+
0
-

Mělo by stačit přidat redirect:

public function renderTopic($id,$where) {
	....
	if ($where == 'last') {
		$paginator->setPage($paginator->getLastPage());
		$this->redirect('this', array('where' => null));
	}
}