Renderovanie stromoveho menu
- srigi
- Nette Blogger | 558
Hi, na zaklade tohto prispevku som si spravil sablonu na stromove menu. Funguje to vyborne ale trocha mi vadi aky HTML kod to generuje:
<ul>
<li>Lorem</li>
<ul>
<li>Lorem's child</li>
<li>Dolor</li>
<ul>
<li>Dolor's child</li>
<li>Sit amet</li>
</ul>
</ul>
<li>Etiam</li>
</ul>
Takto to nie je moc koser. Som nauceny, ze ak nasleduje submenu, LIcko sa neuzavrie ale do neho na vlozi cele ULko a uzavrie sa az za nim.
<ul>
<li>
Lorem
<ul>
<li>Lorem's child</li>
<li>
Dolor
<ul>
<li>Dolor's child</li>
<li>Sit amet</li>
</ul>
</li>
</ul>
</li>
<li>Etiam</li>
</ul>
Snazim sa vseliako sachovat s tou sablonou od Davida, ale nedari sa mi taketo vyrenderovanie dosiahnut. Any ideas?
- Jakub Lédl
- Člen | 55
{block #menu}
<ul>
{foreach $menu as $item}
<li>{if is_array($item)} {include #menu, 'menu' => $item} {else}{$item}{/if}</li>
{/foreach}
</ul>
{/block}
David uvádí v příspěvku #31 tohle. To by mělo generovat správný výstup, ne?
- Ondřej Mirtes
- Člen | 1536
HTML kód v tamtom threadu mi přijde OK, měl by generovat validní výstup. Ukaž svoji šablonu, co to takto špatně generuje.
S aplikováním class jen na nejvyšší úrovni mě napadá např. si
v controlu/presenteru do šablony předat proměnnou $level
nastavenou na 0 a v šabloně vypisovat tu class jen pokud $level == 0. Je
možné, že se ani nepředá dál při tom includování, pokud ji vysloveně
neuvedu v {include} (nevím, je potřeba otestovat), tak by stačilo testovat
nějakou takovou proměnnou na isset($var)
.
- nAS
- Člen | 277
Tu kořenovou třídu můžeš vyřešit třeba takhle (netestováno):
{block #menu}
<ul{if $root} class="root"{/if}>
{foreach $menu as $item}
<li>{if is_array($item)} {include #menu, 'menu' => $item, 'root' => FALSE} {else}{$item}{/if}</li>
{/foreach}
</ul>
{/block}
a v render() metodě nastavíš:
$template->root = TRUE;
Edit: Ha, Ondra mě předběhl…
Editoval nAS (22. 1. 2010 0:32)
- srigi
- Nette Blogger | 558
No, mal som drobnu chybku v sablone, takze som postol naozaj divny HTML kod. Napriek tomu, aj ked mam sablonu presne ako v Davidovom poste, vznika takyto kod:
<ul>
<li>Lorem</li>
<li><!-- obaluje sub UL -->
<ul>
<li>Lorem's child</li>
<li>Dolor</li>
<li><!-- obaluje sub UL -->
<ul>
<li>Dolor's child</li>
<li>Sit amet</li>
</ul>
</li>
</ul>
</li>
<li>Etiam</li>
</ul>
cize sub UL-ko je obalene dodatocnym LI-ckom tej istej urovne. To nie je az take zle, ale ako pisem, som zvyknuty sub UL-ko v rovnakom LI. Ale uvidim ako sa s tym popasujem pri stylovani menu. Necham to tak ako to je (asi je pre mna len tazke odhodit zvyk).
Pridanie class na najvyssom UL a jej nasledne zablokovanie som vyriesil
presne ako postol nAS
(najskor true
, potom predat
dalej false
).
Editoval srigi (22. 1. 2010 0:47)
- iguana007
- Člen | 970
Já toto řešil minulý týden a využil jsem k tomu addon od joda TreeView
verzi 0.5.2 + jsem upravil šablonu tak, aby se generovala validně dle pravidel
XHTML 1.0 Strict:
https://forum.nette.org/…353-treeview
na konci vlákna je ta upravená šablona.
igi
Editoval iguana007 (22. 1. 2010 9:44)