Foreach schleife im Template

Duxias

Mitglied
hallo zusammen,

bei Smarty gibt es ja die foreach Funktion. Ich habe nun für meine eigene Templateklasse versucht, diese Funktion nach zu bauen. Einfache Schleifen sind auch nicht das Problem, mit
PHP:
$pattern = "/(\{[a-z]{7}(.*?)\})(.*?)\{\/[a-z]{7}\}/s"; 
preg_match_all($pattern, $this->data, $ausgabe, PREG_SET_ORDER);
finde ich sie und ersetze sie auch. Mein Problem sind nun verschachtelte Blöcke:
Code:
{foreach item=eintrag from=menu_kat}
  {eintrag.title}
  {foreach item=link from=menu}
    {link.ziel} --> {link.name}
  {/foreach}
{/foreach}
Die Funktion gibt mir nun
PHP:
array(1) {
  [0]=>
  array(4) {
    [0]=>
    string(135) "{foreach item=eintrag from=menu_kat}
  {eintrag.title}
  {foreach item=link from=menu}
    {link.ziel} --> {link.name}
  {/foreach}"
    [1]=>
    string(36) "{foreach item=eintrag from=menu_kat}"
    [2]=>
    string(27) " item=eintrag from=menu_kat"
    [3]=>
    string(89) "
  {eintrag.title}
  {foreach item=link from=menu}
    {link.ziel} --> {link.name}
  "
  }
}
aus, womit ich ja wenig anfangen kann. Könnt ihr mir einen Dankanstoß geben, wie ich es lösen könnte? Ich bin ratlos...

Vielen Dank

Duxias
 
Du kannst hier keinen regulären Ausdruck nehmen, da reguläre Ausdrücke keine Paare (Start-/End-Tag) zählen können. Stattdessen müsstest du dir eine Funktion schreiben, die dir die Eingabe in Tokens zerlegt. Diese kannst du dann sequentiell verarbeiten.
 
Schade, aber ich hatte es mir schon fast gedacht. Dann werd ich mich mal mit einer Funktion dafür versuchen und melde mich bei Bedarf hier noch einmal!

Vielen Dank trotzdem

Duxias
 
Zurück