Deprecated metoda getSteps

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
stpnkcrk
Generous Backer | 189
+
0
-

Navrhuji, aby metoda getSteps() byla v Paginatoru znova k užití (čili odznačení deprecated).

Chápu, že někdo si chce tvořit vlastní způsob, proměnné firstPage a lastPage mu to umožňují, ale pro „běžné“ a jednoduché použití bych se přikláněl k ponechání getSteps();

Co Ty na to Davide?

Jod
Člen | 701
+
0
-

David písal, že to chce dať niekam do šablon nie?

stpnkcrk
Generous Backer | 189
+
0
-

No, já jen že jsem nikde „náhradu“ nenašel…

David Grudl
Nette Core | 8147
+
0
-

Možná by to šlo řešit takovýmto helperem pro šablony:

<?php

abstract class Helpers
{

	/**
	 * Generates list of pages used for visual control.
	 * @return array
	 */
	public static function steps(Paginator $paginator, $steps = 5, $surround = 3)
	{
		$page = $paginator->page;
		if ($paginator->pageCount < 2) {
			return array($page);
		}

		$surround = max(0, $surround);
		$arr = range(max($paginator->firstPage, $page - $surround), min($paginator->lastPage, $page + $surround));

		$steps = max(1, $steps - 1);
		$quotient = ($paginator->pageCount - 1) / $steps;
		for ($i = 0; $i <= $steps; $i++) {
			$arr[] = round($quotient * $i) + $paginator->firstPage;
		}
		sort($arr);
		return array_values(array_unique($arr));
	}

}

A nebo prostě přes Extension Method. Vážně si myslím, že byla chyba tuhle metodu do Paginatora vůbec dávat.

RaR
Člen | 42
+
0
-

Prosím poraďte jak Helper steps.
Vytvořil jsem výše uvedený helper pro paginátor.
V presenteru mám

<?php
$paginator = new Paginator;
...
$this->template->registerHelper('steps', 'Helpers::steps');
$this->template->paginator = $paginator;
?>

jak mám šablonu donutit, aby naplnila pole $steps?

{foreach $steps as $step}

zkusil jsem

{foreach $steps|steps:$paginator as $step}

ale nějak to nehraje. děkuji za pomoc.

David Grudl
Nette Core | 8147
+
0
-

Helper se volá standardně takto:

$template->steps(...)

Je možné, že bude fungovat i {foreach $steps as $step|steps}, nejsem si jist.

RaR
Člen | 42
+
0
-

tak mě to funguje takto:
v presenteru

<?php
$this->template->steps = $this->template->steps($paginator,0,10);
?>

a v šabloně

{foreach $steps as $step}
Panda
Člen | 569
+
0
-

David Grudl napsal(a):

Helper se volá standardně takto:

$template->steps(...)

Je možné, že bude fungovat i {foreach $steps as $step|steps}, nejsem si jist.

Přidání helperu u mě (rev. 225, PHP 5.2.6-win32) nemělo žádný vliv na vygenerovaný zdroják šablony, takže to asi fungovat nebude. Ale možná by mohlo být fajn, kdyby fungovalo něco na způsob toho, co psal RaR:

{foreach $paginator|steps:7:5 as $step}
...
{/foreach}

místo

{foreach $template->steps($paginator, 7, 5) as $step}
...
{/foreach}
stpnkcrk
Generous Backer | 189
+
0
-

Srozumitelnější než

<?php
{foreach $paginator|steps:7:5 as $step}
...
{/foreach}
?>

mě osobně přijde

<?php
{foreach Helpers::steps($paginator, 7, 5) as $step}
...
{/foreach}
?>

…a tím pádem ani není nutné přidávat metodu jako templateHelper.