Navigation mit php/mysql mit Unendlich Unterkategorien

SFischinger

Grünschnabel
Hallo,

ich habe eine kleine Frage, und zwar will ich meine Navigation etwas dynamischer gestalten.
Es soll möglich sein, Hauptkategorien und beliebig viele Unterkategorien zu erstellen.

Würde das ganze dann in einer MySql Tabelle abspeichern. Wie genau müsste das Layout der Tabelle denn aussehn?

Ein php Skript sollte dann das Menü mit der gegebenen Struktur ausgeben können. Z.B.
Code:
+Link
   +Link1
   +Link2
      -link2.1
      -link2.2
   +Link3
     -link3.1.
Danke fü euere Hilfe
 
Zuletzt bearbeitet:
Also ich würde es dir so empfehlen:

Leg 2 Tabellen an. Die eine nennst du "MenuPoints" und die anderen "SubMenu". Oder so in der Art, spielt ja im Endeffekt keine Rolle. Dann Trägst du in MenuPoints alle Oberpunkte ein. Diese Tabelle muss also 2 Spalten haben: id(Primärschlüssel und autoincrement; int) und link(varchar). In die andere Tabelle machst du 3 Spalten. 1. Punkt ebenfalls id, wie oben, 2. Punkt name, auch wie oben und den dritten Punkt nennst du mainlink macht ein Int rein und fertig.

Dann trägst du einfach in die 2. Tabelle unter mainlink einfach die Id des übergeordneten Links aus der 1. Tabelle ein. Eine Mysql-Abfrage mit entsprechender Ausgabe sähe dann so in der Art aus:

PHP:
$query = mysql_query("SELECT * from MenuPoints");
//mainlinks
while($row = mysql_fetch_array($query)){
echo "$row[name]";
//unterlinks
$query2 = mysql_query("SELECT * from SubMenu WHERE mainlink = '$row[id]'");
while($row2 = mysql_fetch_array($query2)){
echo "<ul>$row2[name]</ul>";
}
}

So ähnlich dürfte es dann aussehen. Es geht ja nur drum dir die Struktur zu verdeutlichen.

Edit: Da du dein Text ja grad verändert hast, stimmt ja meine Lösung so ansicht nicht mehr. Ich überleg mir mal was und poste dann nochmal...
 
Zuletzt bearbeitet:
Da du ja eine (theoretisch) unendliche Ebenentiefe haben möchtest, wäre es wahrscheinlich sinnvoll, die Struktur der Navigation als Baum zu speichern.

Dazu benötigst du folgende Felder:

id (unsigned int & autoincrement) // die eindeutige ID des Knotens
title (varchar 255) // der Name des Knotens
link (varchar 255) // der Link des Knotens
parent-id (unsigned int) // die ID des Vaterknotens
childs (enum('yes','no')) // hat der Knoten Kinder

Nun musst du als Erstes alle Einträge auslesen, die keinen Vaterknoten haben. Das wäre dann die erste Ebend. Dann prüfst du, welche dieser Knoten Kinder haben (childs = 'yes') und fragst dann einfach alle Einträge ab, deren parent-id der des Knotens entsprechen.

Dies machst du so lange, bis die Eintrage alle (childs = 'no') sind und du hast deine Navigation mit beliebiger Tiefe.

Nachteil bei der Sache ist natürlich, dass die ganze Geschichte je nach Gestaltung der Ebenen sehr rechenintensiv ist und für jeden Parentnode eine eigene Abfrage gestartet werden muss.
 
Zurück