





















| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Wie programmiert und verwaltet man ein Menü mit mehreren Ebenen? Entweder braucht man eine sehr komplexe Datenbank und eine äusserst komplizierte Menüverwaltung im Administrationsbereich oder ein Menüscript das den Menüaufbau perfekt beherrscht. Wir haben uns diesem Problem gewidmet und ein Script zur Menügenerierung programmiert, das leicht zu integrieren ist und eine einfache Datenbank benötigt. Das Script kann ganz simple in jede Seite eingebunden werden, z.B. mit include "menu.php";. Es benötigt nur wenige Informationen: $menu=0 #Diese Variable wird benötigt wenn mehrere Menüs vorhanden sind. $id=0 #Der aktive Menüpunkt Die Tabellenstruktur in der Datenbank sieht wie folgt aus:
Beispieldaten: (nur benötigte Zellen, Tabellenname="navigation")
Erläuterung der Zellen: id = laufende Nummer (Autoincrement-Zelle) ($id=0) menu = erlaubt mehrere Menüs in einer Tabelle zu verwalten, ($menu=0) parent_id = (0 » "Hauptmenüpunkt") (>0 » "Untermenüpunkt") order_id = legt die Sortierung der Menüpunkte fest, auch innerhalb Unterpunkte! name = der Text des Menüpunktes der angezeigt wird. sichtbar = Menüpunkt sichtbar (1) oder nicht sichtbar (0), deaktiviert nicht Unterpunkte! Demnach gäbe es folgende Menüstruktur: >Home >Test >Tester >Profil >Kontakt Hier ist eine Demo mit 2 Menüs. Das Script:
001 if (!isset($id)) {
002 $result=mysql_query("select id from navigation where `menu`='$menu' order by id limit 0,1");
003 mysql_data_seek ($result, 0); $row = mysql_fetch_row($result);
004 $id=$row[0];
005 }
006
007 ### parent_id der gewählten Seite holen
008 $result=mysql_query("select parent_id from navigation where `id`='$id'");
009 mysql_data_seek ($result, 0); $row = mysql_fetch_row($result);
010 $parent_id=$row[0];
011
012 ### menü in ein Array rein
013 $array=array();
014 $array[0]=getlevel(0);
015
016 ### menü bauen
017 $level=0;
018 $childs=explode(",",parents($id,""));
019 $childs[]=$id;
020 drawmenu($array[0],$level);
021
022 ### Functionen
023 if (function_exists('drawmenu')) {
024 return;
025 }
026 function drawmenu($array,$level) {
027 for ($i=0; $i<=sizeof($array); $i++) {
028 if (is_array($array[$i])) {
029 drawmenu($array[$i],$level+1);
030 } else if ($array[$i]>"") {
031 zeigemenupunkt($array[$i],$level-($i==0 ? 1:0));
032 }
033 }
034 }
035
036 function zeigemenupunkt($mid,$level) {
037 global $parent_id,$childs,$id,$pfad;
038 $result=mysql_query("select name,parent_id,id,sichtbar,nav_path from navigation where `id`='$mid'");
039 mysql_data_seek ($result, 0); $row = mysql_fetch_row($result);
040 if ($row[3]==0) {return;}
041 $childstemp=explode(",",parents($id,""));
042 if (in_array($mid,$childs) or $row[1]==0 or $id==$row[1] or $parent_id==$row[1] or in_array($row[1],$childstemp)) {
043 ################################################################################
044 echo str_repeat("»",$level).($mid==$id ? '<b>':'').'<a href="'.$pfad.$row[4].'">'.$row[0].($mid==$id ? '</b>':'').'</a><br>';
045 ################################################################################
046 }
047 }
048
049 function ischild($aid) {
050 global $id;
051 $result=mysql_query("select parent_id from navigation where `id`='$aid'");
052 mysql_data_seek ($result, 0); $row = mysql_fetch_row($result);
053 if ($row[0]==0 or $row[0]==$id) {
054 return 1;
055 } else {
056 return 0;
057 }
058 }
059
060 function parents($id,$parents) {
061 $result=mysql_query("select parent_id from navigation where `id`='$id'");
062 mysql_data_seek ($result, 0); $row = mysql_fetch_row($result);
063 if ($row[0]>0) {
064 $parents.=",".$row[0];
065 $parents.=",".parents($row[0],"");
066 }
067 return str_replace(",,",",",$parents);
068 }
069
070 function getlevel($parent) {
071 global $id,$menu;
072 $ret=array();
073 $result=mysql_query("select id from navigation where `menu`='$menu' and `parent_id`='$parent' order by order_id");
074 for ($i=0; $i<mysql_num_rows($result); $i++) {
075 mysql_data_seek ($result, $i); $row = mysql_fetch_row($result);
076 if (mysql_num_rows(mysql_query("select id from navigation where `parent_id`='$row[0]' order by order_id"))) {
077 $ret[$i+1]=getlevel($row[0]);
078 array_unshift($ret[$i+1],$row[0]);
079 } else {
080 $ret[$i+1]=$row[0];
081 }
082 }
083 return $ret;
084 }
Informationen zum Script:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||




| ||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
