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