DHTML Menü aus Datenbank?

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich benötige ein DHTML Menü, dass die erste Ebene horizontal darstellt und jede Unterebene vertikal angezeigt wird. Ich habe viele DHTML Menüs ausprobiert, aber jedes war statisch. Das will ich allerdings nicht. Hat jemand soetwas schonmal gemacht und kann mir ein paar Tipps geben? Bisher habe ich allerdings auch noch keines selber geschrieben.


Gruß Radhad
 
Was genau meinst du denn mit "statisch"? Wie würde denn ein dynamisches Menü für dich aussehen? Sprich wann aendert sich die Datenbank und wann muss demnach das Menue aktualisiert werden?

Eigentlich ist das Ganze ja relativ simpel: Du schreibst dein Menü mit Untermenüs ganz normal in HTML (wahlweise mit php) und positionierst es mit css. Die Untermenüs versteckst du über document.getElementByWasAuchImmer.style.display='none' und machst sie bei Bedarf - in der Regel per onclick oder mouseover - sichtbar und versteckst sie dann wieder - in der Regel auch per onclick oder onmouseout.

Das sollte eigentlich dynamisch genug sein. Wenn sich deine Datenbank wirlich so schnell aendert, dass du bei jedem Oeffnen des Menues, also bei jedem Klick die Unermenues aktualisieren willst, wuerde ich mal bei den js-Tutorials und hier bei der Forensuche (Suchbegriff: MySQL oder Datenbank) Inspiration verschaffen, wie man ueber js und eine serverseitige Sprache auf Datenbanken zugreift - da gibt es genug Threads hier.
 
Zuletzt bearbeitet:
Ahnung von PHP + MySQL habe ich auch. Ich würde nur gerne die Navigationsstruktur in der Datenbank ablegen, damit ich da evtl. neue Punkte hinzufügen kann, bequem und einfach, bzw. dass auch andere mit den entsprechenden Rechten auf der Seite dies ändern können, ohne dass der User sich mit JavaScript oder so auskennen muss. Bisher kamen die Daten für Die Links und Unterlinks alle aus Dateien, wo sie als Klartext fest drinne standen. Sogar mit Layern, was dabei recht sinnig ist. Meine Frage wäre dann, kann ich solch eine *.js Datei mit Werten aus einer Datenbank beim Aufruf einer Seite füllen oder müssen die immer als Klartext in dieser *.js Datei stehen. Sollte letzteres zutreffen, bastel ich mit php einen kleinen Editor ^^

Ich hoffe du hast jetzt verstanden, worauf ich hinaus will.


Gruß Radhad
 
Also ich hab ein 3 ebenen tiefes Menü mit einer mysql DB dahinter mit mehreren Tabellen gemacht.

menu0 - Hauptmenü
menu1 - 1. Untermenü
menu2 - 2. Untermenü

Bei jedem Untermenüpunkt hinterlegt zu welchen Datensatz des übergeordneten Menüs er gehört.

Dürfte kaum ein Problem sein daraus dann mittels PHP die Menüstruktur generieren zu lassen.
 
Wie sähe denn dann sowas mit dem JavaScript aus? Denn da habe ich keine Kenntnisse drüber... Tutorials habe ich mir auch schon angeschaut, aber die haben mir nicht weitergeholfen. Auf der Site http://radhad.homedns.org findet ihr die Site, an der ich arbeite. Dort wo "Home" steht, soll das DHTML Menü erscheinen bzw. wenn ich einen weiteren Eintrag hinzufüge, will ich davon auch wieder Liks per DHTML Menü anzeigen, wenn vorhanden.

Dennis Wronka hat gesagt.:
Du kannst so ein Menue mit PHP aus einer Datenbank erstellen lassen.
Sowas hab ich auf der Arbeit in unserem Portal verbaut.
Hm... vielleicht kannst du mir da mal ein Beispiel zeigen?

Das wäre super !
 
Zuletzt bearbeitet:
Ich tendiere irgendwie dazu den Thread in's PHP-Forum zu schieben, denn mit Datenbanken hat JavaScript ja nicht viel zu tun.

Hier mal der Code der das Menu aus der Datenbank ausliest und erstellt.
Fuer den IE wird hierbei JavaScript genutzt, fuer alle anderen CSS.
PHP:
$statics_menus=mysql_query("select * from statics_menu order by menu",$mydb);
if (mysql_num_rows($statics_menus)>0)
	{
		$changes[$changesection].='<hr>';
		$changes[$changesection].='<ul>';
		$x=1;
		while ($statics_menu=mysql_fetch_assoc($statics_menus))
			{
				if ($setting['staticssort']==0)
					{
						$statics_contents=mysql_query("select * from statics_content where menu='".$statics_menu['id']."' and showitem='1' order by title",$mydb);
					}
				else
					{
						$statics_contents=mysql_query("select * from statics_content where menu='".$statics_menu['id']."' and showitem='1' order by hitcount desc,title",$mydb);
					}
				if ($browser=="Internet Explorer")
					{
						$changes[$changesection].='<li onmouseover="javascript:menuopen(\'submenu'.$x.'\');" onmouseout="javascript:menuclose(\'submenu'.$x.'\');">';
						$changes[$changesection].=$statics_menu['menu'];
						if (mysql_num_rows($statics_contents)>0)
							{
								$changes[$changesection].='<ul class="csssubmenu" id="submenu'.$x.'">';
								while ($statics_content=mysql_fetch_assoc($statics_contents))
									{
										$changes[$changesection].='<li><a href="index.php?action=showstatics&amp;content='.$statics_content['id'].$sessionparm_link.'">'.$statics_content['title'].'</a></li>';
									}
								$changes[$changesection].='</ul>';
							}
						$changes[$changesection].='</li></span>';
						$x++;
					}
				else
					{
						$changes[$changesection].='<li class="cssmenu">';
						$changes[$changesection].=$statics_menu['menu'];
						if (mysql_num_rows($statics_contents)>0)
							{
								$changes[$changesection].='<ul class="csssubmenu">';
								while ($statics_content=mysql_fetch_assoc($statics_contents))
									{
										$changes[$changesection].='<li class="cssitem"><a href="index.php?action=showstatics&amp;content='.$statics_content['id'].$sessionparm_link.'">'.$statics_content['title'].'</a></li>';
									}
								$changes[$changesection].='</ul>';
							}
						$changes[$changesection].='</li>';
					}
			}
		$changes[$changesection].='</ul>';
	}

Der Vollstaendigkeit halber noch die jeweiligen Ausschnitte aus den CSS-Files.
Fuer IE:
Code:
ul,li
	{
		margin:0;
		padding:0;
		list-style:none;
		width:150px;
		background-color:#7b88a9;
	}
ul.cssvismenu
	{
		position:absolute;
		left:100px;
		background-color:#7b88a9;
		border:1px solid;
		display:block;
	}
ul.csssubmenu
	{
		display:none;
	}
Fuer alle anderen:
Code:
ul,li
	{
		margin:0;
		padding:0;
		list-style:none;
		width:150px;
		background-color:#7b88a9;
	}
ul.csssubmenu
	{
		display:none;
		position:absolute;
		margin-top:-15px;
		left:100px;
		background-color:#7b88a9;
		border:1px solid;
	}
li.cssmenu:hover,li.cssitem:hover
	{
		background-color:#29425a;
	}
li.cssmenu:hover ul.csssubmenu
	{
		display:block;
	}

Ich hab mach entschlossen den Thread doch zu verschieben, das wird alles zu PHP-lastig.
 
Ich habe das ganze mal eine Zeit lang studiert, aber ich komm da trotz allem nicht ganz hinter. Vielleicht kannst du mir das evtl. doch nochmal genauer erklären?

Werden auch Layer benutzt, damit das Menü über dem anderen Inhalt angezeigt wird oder wie funktioniert das?


Gruß Radhad
 
Nun, das muss ich wohl noch z.T. bearbeiten, so sieht die aktuelle Struktur aus:

ID int(255) Primary Key
AnzeigeID (255) *für die Anzeigereihenfolge auf der 1. Ebene*
Name varchar(255)
Link varchar(255)
Recht int(255) *ID der Gruppe, um Zugriff zu bekommen*

Man könnte noch nach AnzeigeID eine Spalte namens "BelongsTo" machen, wo man den Primary Key des Elements reinschreibt, zu dem es gehört, und davon unabhängig eine AnzeigeID, oder das ganze auslagern in eine eigene Tabelle. Das habe ich erstmal noch offen gelassen.
 
Zurück