isLast(), isFirs()t jak je správně použít?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KillPrd
Začátečník | 110
+
0
-

Ahoj chtěl jsem použít v šabloně funkci která zjistí že je na konci cyklu. Tedy isLast()
tot je muj zapis:
{if $iterator->isLast()} je posledni {/if}

Ale on nějak nefunguje ani {$iterator->getCounter()} stále vypisuje stejné číslo.

celé to mám takto:

<?php
{foreach $navi as $items}
	{foreach $items as $value =>$key}

	{$value}{if $iterator->isLast($navi)} {$iterator->getCounter()} {/if}
	{/foreach}
{/foreach}
?>

Nevím zda ve verzi 2.0 proběhly nějaké změny nebo to mám špatně použité…

problém je že nemuže být ve dvou foreach když je v jednom tak to funguje jakmile to vložím do druhého tak už to nejde

Editoval KillPrd (18. 1. 2011 9:20)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Metodě isLast() není třeba nic předávat – pokud se nemýlím, tak umí přijímat pouze číslo, které se pak chová jako modulo.

KillPrd
Začátečník | 110
+
0
-

No zkoušel jsem to i bez předání… tedy isLast() a nic jak říkám jakmile je to v druhém foreachy přestane fungovat

jtousek
Člen | 951
+
0
-

Protože máš $iterator z toho vnitřního foreache. Před spuštěním vnitřního si napiš {$outerIterator = $iterator} a ten pak používej.

KillPrd
Začátečník | 110
+
0
-

zda jsem to správně pochopil tak {$outerIterator = $iterator} vložím do druhého foreach a pak používám
$outerIterator->getCounter(); ale to mi nefunguje
píše mi to

Fatal error: Method SmartCachingIterator::__toString() must not throw an exception in /Applications/XAMPP/xamppfiles/htdocs/boro/libs/Nette/Templates/Filters/TemplateHelpers.php on line 0

Patrik Votoček
Člen | 2221
+
0
-

{$outerIterator = $iterator} je imho blbost když už tak už {var $outerIterator = $iterator}

a imho:

{foreach $navi as $items}
	{var $outerIterator = $iterator}
	{foreach $items as $value => $key}
	{* kdyby jsi to `{var $outerIterator = $iterator}` použil až tady tak si tam uložíš iterátor z tohohle nového foreache... *}
	{$value}{if $iterator->isLast($navi)} {$iterator->getCounter()} {/if}
	{/foreach}
{/foreach}

TIP: můžeš místo {if $iterator->isLast()}...{/if} použít {if $iteragor->last}...{/if} a nebo ještě lépe {last}...{/last}

jtousek
Člen | 951
+
0
-

vrtak-cz: Ano jistě, to var mi vypadlo. :)

KillPrd: Samozřejmě že to {var $outerIterator = $iterator} do vnějšího. A pak v tom vnitřním {if $outerIterator->isLast()} tedy pokud jsem správně pochopil, čeho chceš docílit.