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}