Mailinglisten-Archive |
* Marcel Beerta wrote:
> Ich habe so aber das Problem, dass ich nur maximal 2 Menütiefen habe. Ich
> hätte aber gern n menüebenen. So hab ich's momentan auch gelöst, aber
> rekursiv wär's mir lieber :)
Funktion traverse, die als Parameter die Startebene
übergeben bekommt (also 0, weil select * from tbl
where parent=0 gibt dir alle Elemente der ersten
Ebene) plus eine Variable, an die es ein neues Array-
Element anhängen soll. Diese gehst du in einer while-Schleife durch
und baust jedes Mal ein neues Array-Element mit einer
ID für Menu3 und dem Titel.
Danach machst du -- innerhalb der while-schleife --
ein neues select, diesmal
select * from tbl where parent=<id des aktuellen datensatzes>
d.h. "Hat dieser Datensatz noch Unterelemente?".
Wenn ja, rufst du die Funktion traverse erneut
auf, allerdings als ID-Parameter die id des
aktuellen Datensatzes und als Variable einfach
$var["sub"]
D.h. ungefähr so:
function traverse($parentcheck, &$var) {
-> select * from tbl where parent=$parentcheck
while ( -- ) {
$id = id von oberem select
$tmparr = array("title" => titelausdb,
"url" => urlausdb);
-> select count(*) as anz from tbl where parent=$id
if ($diesesanz > 0) {
$tmparr["sub"] = array();
$var["eindeutigeID"] = $tmparr;
traverse($id, $var["eindeutigeID"]["sub"]);
} else {
$var["eindeutigeID"] = $tmparr;
}
}
}
$menubaum = array();
traverse(0,$menubaum);
Sollte funktionieren, kann aber auch sein, dass es
Fehler enthält, ist nur schnell dahingewurschtelt.
--
PHP Schulungen und | International PHP Conference
Schulungsmaterial: | 05. - 07.11.2001
http://thinkphp.de/ | Astron Hotel, Frankfurt
http://rent-a-phpwizard.de/schulungen.php | http://www.php-kongress.de/
php::bar PHP Wiki - Listenarchive