Rekurzivní volání bloku v šabloně

- darkwind
 - Člen | 32
 
Ahoj,
s Nette se teprve učím, a narazil jsem na malý zádrhel při rekurzivním
volání bloku v šabloně.
Dělám stromovou strukturu kategorií a potřeboval bych, aby se mi při první zavolání bloku #menu u ul nastavila class=„categoryTree“, ale při druhém a dalším zavolání už zůstalo pouze prázdné <ul>
Zkoušel jsem to přes nastavení var rekurze, ale to mi nějak nefunguje… Mohu poprosit o radu, co dělám špatně?
{var $rekurze = 0}
{block #menu}
<ul{if $rekurze == 0} class="categoryTree"{/if}>
{foreach $categoryTree as $item}
<li><a n:href="Category:default">{$item->title}</a>{if $item->children} {include #this, categoryTree => $item->children}{/if}</li>
{/foreach}
</ul>
{var $rekurze = 1}
{/block}
					Editoval darkwind (28. 4. 2012 17:28)

- nanuqcz
 - Člen | 822
 
Ahoj,
to s tou {var $rekurze = 1} jsem nepochopil :-) Ale já bych to
udělal takto:
{var $depth = 0}
{block #menu}
{?$depth++}
<ul n:class="$depth == 1? categoryTree">
	{foreach $categoryTree as $item}
	<li>
		<a n:href="Category:default">{$item->title}</a>
		{if $item->children} {include #this, categoryTree => $item->children}{/if}
	</li>
	{/foreach}
</ul>
{/block}
					Editoval nanuqcz (28. 4. 2012 17:31)

- darkwind
 - Člen | 32
 
no, ono to rekurze mělo fungovat podobně jako to tvoje $depth, akorat to je jinak pojmenované :-) cílem bylo, aby na začátku byla hodnota 0, a až to aspoň jednou projde, tak se mu nastaví 1.
myšlenka podobná, provedení o trochu horší :D
děkuju moc za radu, to tvoje samozřejmě funguje :))

- 22
 - Člen | 1478
 
to se da asi zapsat elegantněji, nástřel níže, imho proměna se do bloku nedostane, pokud je definovan mimo něj, myslím, ale myslet znamená houby vědět :-)
{block #menu}
{var $rekurze = 0}
<ul n:class="$rekurze === 0 ? categoryTree" n:inner-foreach="$categoryTree as $item">
	<li>
		<a n:href="Category:default">{$item->title}</a>
		{if $item->children}
			{include #this, categoryTree => $item->children}
		{/if}
	</li>
	{var rekurze = 1}
</ul>
{/block}