locomputing
SQL Sub-MenĂ¼ 
Tabelle für Datenbank Sub-Menü
CREATE TABLE test_menu
(
id int(11) NOT NULL,
label varchar(30) NOT NULL,
ziel varchar(20) NOT NULL,
link_url varchar(50) NOT NULL,
parent_id int(6) NOT NULL,
PRIMARY KEY (id)
);
Tabelle befüllen für Ausgabe aus Datenbank
INSERT INTO test_menu ('id','label','ziel','link_url','parent_id') VALUES
(1, 'Seite 1','seite1','seite1.php',0),
(2, 'Seite 2','seite2','seite2.php',0),
(3, 'Seite 2a','seite2','seite2a.php',2),
(4, 'Seite 2b','seite2','seite2b.php',2),
(5, 'Seite 3','seite3','seite3.php',0),
(6, ..., ..., ..., 0),
(., ..., ..., ..., .);
Sämtliche Seiten müßen erstellt werden!
Die entsprechende Datenbank Verbindung einfügen
<?php
$parent_menu = array();
$sub_menu = array();
?>
Datenbank abfrage
<?php
$items=$msql->prepare("SELECT id,label,ziel,parent_id FROM test_menu ORDER BY parent_id,id ASC");
$items->execute();
$result=$items->get_result();
while ($obj=$result->fetch_object())
<?php
$items=$pdo->prepare("SELECT id,label,ziel,parent_id FROM test_menu ORDER BY parent_id,id ASC");
$items->execute();
while ($obj=$items->fetchObject())
{
if ($obj->parent_id == 0)
{
$parent_menu[$obj->id]['label']=$obj->label;
$parent_menu[$obj->id]['link']=$obj->ziel;
}
else
{
$sub_menu[$obj->id]['parent']=$obj->parent_id;
$sub_menu[$obj->id]['label']=$obj->label;
$sub_menu[$obj->id]['link']=$obj->ziel;
if (empty($parent_menu[$obj->parent_id]['count']))
{
$parent_menu[$obj->parent_id]['count']=0;
}
$parent_menu[$obj->parent_id]['count']++;
}
}
?>
Funktion
<?php
function test_menu($parent_array,$sub_array,$qs_val="pid")
{
Variable definieren
$page=isset($_GET['page']) ? $_GET['page'] : '';
Variable $menu auf leeren Wert setzen
$menu = "";
foreach($parent_array as $pkey=>$pval)
{
if (!empty($pval['count']))
{
if (($page)==$pval["link"])
{
$menu.='<ul><li>'.$pval['label'].'</li></ul>';
}
else
$menu.='<ul><li>
<a href="index.php?page='.$pval['link'].'&'.$qs_val.'='.$pkey.'">'.$pval['label'].'</a>
</li></ul>';
}
else
{
if (($page) == $pval["link"])
{
$menu.='<li>'.$pval['label'].'</li>';
}
else
$menu.='<li><a "href="index.php?page='.$pval['link'].'">'.$pval['label'].'</a></li>';
}
if (!empty($_REQUEST[$qs_val]))
{
$menu.='<ul>';
foreach($sub_array as $sval)
{
if ($pkey == $_REQUEST[$qs_val] && $pkey == $sval['parent'])
{
if (($page) == $sval["link"])
{
$menu.= '<li class="raus">'.$sval['label'].'</li>';
}
else
$menu.='<ul><li class="raus"><a href="index.php?page='.rebuild_link($sval['link'], $qs_val, $sval['parent']).'">'.$sval['label'].'</a></li></ul>';
}
}
$menu.='</ul>';
}
}
return $menu;
}
?>
Link erstellen
<?php
function rebuild_link($link, $parent_var, $parent_val)
{
$link_parts=explode("&", $link);
$base_var="&".$parent_var."=".$parent_val;
return $link_parts[0].$base_var;
}
?>
Ausgabe
<?php
echo test_menu($parent_menu, $sub_menu);
?>
So sollte ein Menü funktionieren:
sql-submenu
Hier geht es zum Original Menü in Englisch.