phpbar.de logo

Mailinglisten-Archive

[php] smarty-Schleife, ich finde den Fehler nicht :-)

[php] smarty-Schleife, ich finde den Fehler nicht :-)

Dr. Volker Göbbels goebbels at gmx.de
Die Feb 27 09:51:25 CET 2007


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