Menü in PHP ist nur bis in die zweite Ebene schachtelbar

Liebe/-r Experte/-in,

Ich arbeite gerade an einem CMS. Dabei habe ich aber das Problem, dass in meinem Menü ich einträge nur zwei Ebenen tief verschachteln kann. Hier erst mal mein Quellcode:

<?php require("connect.inc.php");
$sql = "SELECT id, label, link\_url, parent\_id FROM dyn\_menu ORDER BY parent\_id, pos ASC"; $items = mysql\_query($sql); while ($obj = mysql\_fetch\_object($items)) { if ($obj-\>parent\_id == 0) { $parent\_menu[$obj-\>id]['label'] = $obj-\>label; $parent\_menu[$obj-\>id]['link'] = $obj-\>link\_url; } else { $sub\_menu[$obj-\>id]['parent'] = $obj-\>parent\_id; $sub\_menu[$obj-\>id]['label'] = $obj-\>label; $sub\_menu[$obj-\>id]['link'] = $obj-\>link\_url; $parent\_menu[$obj-\>parent\_id]['count']++; } } mysql\_free\_result($items); function dyn\_menu($parent\_array, $sub\_array, $qs\_val = "menu", $main\_id = "nav", $sub\_id = "subnav", $extra\_style = "foldout") { $menu = " \n"; foreach ($parent\_array as $pkey =\> $pval) { if (!empty($pval['count'])) { $menu .= " - [".$pval['label']."](%255C%2522%2522.%2524pval%255B'link'%255D.%2522?%2522.%2524qs_val.%2522=%2522.%2524pkey.%2522%255C%2522) \n"; } else { $menu .= " - [".$pval['label']."](%255C%2522%2522.%2524pval%255B'link'%255D.%2522%255C%2522) \n"; } if (!empty($\_REQUEST[$qs\_val])) { $menu .= " \n"; foreach ($sub\_array as $sval) { if ($pkey == $\_REQUEST[$qs\_val] && $pkey == $sval['parent']) { $menu .= " - [".$sval['label']."](%255C%2522%2522.rebuild_link(%2524sval%255B'link'%255D,) \n"; } } $menu .= "\n"; } } $menu .= "\n"; return $menu; } function rebuild\_link($link, $parent\_var, $parent\_val) { $link\_parts = explode("?", $link); $base\_var = "?".$parent\_var."=".$parent\_val; if (!empty($link\_parts[1])) { $link\_parts[1] = str\_replace ("&", "##", $link\_parts[1]); $parts = explode ("##", $link\_parts[1]); $newParts = array (); foreach ($parts as $val) { $val\_parts = explode ("=", $val); if ($val\_parts[0] != $parent\_var) { array\_push($newParts, $val); } } if (count($newParts) != 0) { $qs = "&".implode("&", $newParts); } return $link\_parts[0].$base\_var.$qs; } else { return $link\_parts[0].$base\_var; } } ?\> Die Funktion rufe ich dann in jeder Seite so auf: echo dyn\_menu($parent\_menu, $sub\_menu, "menu", "nav", "subnav"); Meine Datenbank sieht so aus: CREATE TABLE `dyn_menu` ( `id` INT(11) NOT NULL AUTO\_INCREMENT, `label` VARCHAR(50) NOT NULL DEFAULT '', `link_url` VARCHAR(100) NOT NULL DEFAULT '#', `parent_id` INT(11) NOT NULL DEFAULT '0', `pos` INT(11) NOT NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM; In der Datenbank gibt es ja die ID, die jeden Eintrag eindeutig identifiziert. Dazu kommt dann noch die Parrent\_ID, mit der die Einträge noch jedem anderen Eintrag zugeordnet werden können. In dem Script wird ja geprüft, ob die ID und die parent\_id übereinstimmen. Das Problem ist aber nun, dass ich eben damit nur Bäume mit jeweils einem Unterast bauen kann, sobald man tiefer schachteln will, legt das Script in die HTML Ausgabe nur ganz ans Ende der navigationsliste noch eine Variablenübergabe ohne Link hin. Wie bekommt man dieses Script jetzt so aufgebohrt, dass der wirklich alles rekursiv durchgeht und die Struktur quasi unendlich tief verschachtelbar wird? Ok, 4 Ebenen würden mir für mein Vorhaben ja schon reichen. Danke für jede Hilfe. Richard