Leeloo5E: Smarty-Template: Array nach HTML-Liste

Beitrag lesen

Hallo,

nach dem ich mein letztes Problem erfolgreich mit DOM lösen konnte, stehe ich nun eigentlich wieder vor dem selben Problem. Besagte Struktur, die in Form eines Arrays vorliegt

  
Array (  
  [0] => Array (  
                 [level] => 1  
                 [name] => Wurzel  
  )  
  [1] => Array (  
                 [level] => 2  
                 [name] => Kapitel 1  
  )  
  [2] => Array (  
                 [level] => 3  
                 [name] => Kapitel 1.1  
  )  
  [3] => Array (  
                 [level] => 3  
                 [name] => Kapitel 1.2  
  )  
  [4] => Array (  
                 [level] => 4  
                 [name] => Kapitel 1.2.1  
  )  
  [5] => Array (  
                 [level] => 2  
                 [name] => Kapitel 2  
  )  
 )  

soll anstatt in dort vorgegebene "section"-Struktur nun in eine ul-li-Struktur:

  
<ul>  
  <li>Kapitel 1  
    <ul>  
      <li>Kapitel 1.1.</li>  
      <li>Kapitel 1.2.  
        <ul>  
          <li>Kapitel 1.2.1.</li>  
        </ul>  
      </li>  
    </ul>  
  </li>  
  <li>Kapitel 2.</li>  
</ul>  

Das Problem diesmal wieder: Ich verwende für die Auswertung des Array Smarty.
Zuvor hatte ich mit der Beispiel-Klasse von Arne Klempert zum Thema NestedSets das ganze als Tabelle mit vorherigem Einfügen von Grafiken realiisert. So das dieser Dokumentenstruktureffekt auftrat. Mit der ul-li-Liste möchte ich nun ein dynamisch aufklappbares Menü erstellen. Die passende Java-Klasse hab ich schon. Nur bleibt die Frage, wie ich das Menü in die obige Struktur unter Verwendung der Smarty-Template-Möglichkeiten bringe?

Wenn ich so weiter überlege, glaube ich, das krieg ich nicht hin so: In jedem eingefügten Listenpunkt besteht die Möglichkeit, dass dort ebenfalls ein weiteres neues UL-Element eingefügt werden kann, aber eben nicht immer, anstatt dessen kann auch ein weiteres LI-Element folgen ...

Sehr weit bin ich leider noch nicht:

  
 <ul class="mktree">  
  <!--{assign var='last' value=0}-->  
  <!--{foreach item=chapter from=$chapters}-->  
   <li>  
     <!--{$chapter.level}-->  
     <!--{$chapter.name}-->  
   </li>  
  
    <!--{assign var='last' value=$chapter.level}-->  
    <!--{$last}-->  
  <!--{/foreach}-->  
</ul>  

Ich setze also eine Variable 'last' auf 0. Dann gehe ich das Array durch. Dort habe ich den Namen und das Level. D.h. ich habe das letzte Level immer da und kann mit dem aktuellen vergleichen.

Gruß,
Leeloo

--
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra