Hallo Leute,
ich versuche gerade eine verschachteltes Menü aus meiner Datenbank zu bauen.
meine DB hat dabei folgende Felder:
id, name, ebene, link, sort, link, pos
Mein bisheriges Script schaut wie folgt aus:
Allerdings funktioniert das ganze nicht zu 100%. Ich kann max nur 2 Ebenen anlegen, alle anderen werden garnicht angezeigt. Und irgendwie macht er mir alle Links doppelt. Alles in allem bin ich sehr unzufrieden mit der Sache. Die Nestet Sache die man überall im Internet findet hab ich mir angesehen und raffe sie einfach nicht.
Kann mir einer weiter helfen? Möglichst ohne meine DB umbauen/erweitern zu müssen.
ich versuche gerade eine verschachteltes Menü aus meiner Datenbank zu bauen.
meine DB hat dabei folgende Felder:
id, name, ebene, link, sort, link, pos
Mein bisheriges Script schaut wie folgt aus:
PHP:
// hold all references
$ref = array();
// hold all menu items
$items = array();
// loop over the result
while ($data = $query->fetchObject()) {
// Assign by reference
$thisRef = &$ref[$data->id];
// add the menu parent
$thisRef['parent'] = $data->ebene;
$thisRef['label'] = $data->name;
$thisRef['link'] = $data->link;
// if there is no parent push it into items array()
if ($data->ebene == 0) {
$items[$data->id] = &$thisRef;
} else {
$ref[$data->ebene]['child'][$data->id] = &$thisRef;
}
}
function get_menu($items, $class = 'menu') {
$html = '<ul class="'.$class.'">';
foreach ($items as $key => $value) {
$html.= '<li><a href="'.$value['link'].'">' . $value['label'];
if (array_key_exists('child', $value)) {
$html .= get_menu($value['child'], 'child');
}
$html .= "</a></li>";
}
$html .= "</ul>";
return $html;
}
echo get_menu($items);
Allerdings funktioniert das ganze nicht zu 100%. Ich kann max nur 2 Ebenen anlegen, alle anderen werden garnicht angezeigt. Und irgendwie macht er mir alle Links doppelt. Alles in allem bin ich sehr unzufrieden mit der Sache. Die Nestet Sache die man überall im Internet findet hab ich mir angesehen und raffe sie einfach nicht.
Kann mir einer weiter helfen? Möglichst ohne meine DB umbauen/erweitern zu müssen.