Mailinglisten-Archive |
Hallo Henning,
ein Hinweis vorweg. Den Konstrukt:
{if !empty($navigation)}
benötigst du nicht, da Smarty das bei einem foreach automatisch
macht. Such mal nach der Schleife im compilierten PHP Code ;)
Das ganze sieht fürchterlich kompliziert aus. Ich würd das mit einem
rekursiven Include lösen:
1. Erzeugen eines Menüpunktes, Datei menu_item.tpl:
<li><a href="{$item.link}">{$item.name}</a></li>
2. Oberster Einstieg in die Navigation ist navigation.tpl:
<ul>
{foreach from=$itemlist item=item}
{include file="menu_item.tpl" item=$item}
{if $item->hasSubItems}
<ul>
{include file="navigation.tpl" itemlist=$item->subItems}
</ul>
{/if}
{/foreach}
</ul>
Das ist jetzt so aus der Hüfte geschossen und entspricht vom
Variableninhalt ja nicht deinem Beispiel.
"hasSubItems" ist halt ein Flag, das true ist, wenn es
Unterkategorien gibt. Kann man auch durch einen Count über alle
Children ersetzen. Ansonsten geht mein Beispiel davon aus, daß es
sich um einen Baum aus Node-Objekten handelt, die in $o->subItems ein
Array aus Node-Objekten nethält und jedes Node-Objekt hat mindestens
die Properties "name", "link" und eben "hasSubItems". Läßt sich aber
auch wie gesagt auf deine Datenstruktur anwenden.
Das müßte man dann noch anpassen. Die generellen Vorteile sind
erstens, daß viele if's wegfallen und zweitens die <ul>/<li>
Schachtelung per se immer valide ist.
Viele Grüße,
Volker Göbbels
--
Dr. Volker Göbbels
Arachnion GmbH & Co. KG, Sandkaulbach 4, 52062 Aachen
Geschäftsführer Dr. V. Göbbels, HR Aachen A 4674
http://www.arachnion.de, http://blog.arachnion.eu
php::bar PHP Wiki - Listenarchive