Menü rekursiv, aber wie?

Hallo,

ich möchte eine Navigation für meine Seite schreiben, die ich aber mehr in meine Anforderungen integrieren möchte.

Wie sicher viele Menüs soll auch meines erst die Hauptpunkte anzeigen, wird ein Hauptpunkt angeklickt und es befinden sich darunter weitere Punkte, sollen diese angezeigt werden etc. Das alles ist ja nichts neues...

Nun will ich aber das ganze etwas an mein Konzept anpassen und da tu ich mich schwer, andere Scripte so umzubauen, dass es eben geht. Zum Beispiel gibt es auch Menüpunkte, die nur angemeldeten Benutzern mit entsprechendem Recht sichbar gemacht werden sollen etc.

Daher möchte ich das ganze jetzt selber anfangen, doch irgendwie fehlt mir die richtige Eingabe dazu.

Hat evtl jemand ein Tutorial, wie man dies rekursiv macht? So richtig verständlich? ;-)

Wie würder Ihr vorgehen?

Gruss,
Daniel
 
Wozu denn rekursiv?
Die Punkte sind dir doch alle bekannt....
Von daher würde ich einfach den HTML-Output machen und um die betreffenden Stellen ein if oder ähnliches Packen, welches dann das Expanden des enstprechenden Menüpunkts sowie das (nicht)Anzeigen von Menüpunkten je nach Userstatus abhandelt.
Oder welche Struktur hast du in die du das einbetten willst, dass es unbedingt rekursiv sein muss? Ich meine nicht das es ein Problem ist sowas rekursiv aufzubauen, nur nutze ich Rekursionen nur dann wenn sie mir Code sparen.
 
Hallo BigBen,

ich möchte es so machen, dass die Menüstruktur mit den aufzurufenden Seiten in einer MySQL-Tabelle hinterlegt sind, so ist eine spätere Änderung auch durch andere über eine Seite einfacher.

Da ich aber zur Laufzeit kein Menü über MySQL haben möchte (Datenbank könnte ja mal kurz nicht erreichbar sein), denke ich daran, dass Menü dann nach dem ändern auf "Befehl" erzeugen zu lassen (Datei mit Array), welche dann vom Script (index.php) eingelesen und verarbeitet wird.

Dadurch brauche ich ja quasi eine rekursive Verarbeitung, damit ich auf Unterpunkte etc reagieren kann.

Soweit erst mal mein Gedanke. Allerdings muß ich gestehen, dass das Umsetzen doch eher schwieriger zu sein scheint, zumindest derzeit für mich.

Gruss,
Daniel
 
Ich glaube das ist was du willst:

Du hast in deiner Tabelle links 2 Felder

ID - autoincrement Primärschlüssel
parent_id - Wer steht über dem Menupunkt ?

würde so aussehen(ID, parent_id)

Hallo(1,0)
--unterhalle(2,1)
--unterhallo2(3,1)
Tschüss(4,0)
--tschüssi(5,4)
--tschaui(6,4)

Ist das damit klar ? Damit ist es ein leichtes komplette Menüzweige zu verschieben und du hast eine theoretisch unendliche Vertiefung.
 
tefla hat gesagt.:
Du hast in deiner Tabelle links 2 Felder

ID - autoincrement Primärschlüssel
parent_id - Wer steht über dem Menupunkt ?

würde so aussehen(ID, parent_id)

Hallo(1,0)
--unterhalle(2,1)
--unterhallo2(3,1)
Tschüss(4,0)
--tschüssi(5,4)
--tschaui(6,4)

Ist das damit klar ? Damit ist es ein leichtes komplette Menüzweige zu verschieben und du hast eine theoretisch unendliche Vertiefung.
Zum Glück hast Du theoretisch geschrieben ;o) Ich glaub kaum, dass mit dem Parent-ID Modell wirklich Menüzweige von unendlicher Baumtiefe performant möglich sind.
 
Na das ist ja wohl klar.

Ich würd es z.B. auch nur bei Navigationen anwenden, wo man immer nur einen Teil der Baumes sieht. Ansonsten wird es schon zu heftig für die Datenbank. Aber es hat halt viele Vorteile und wenn er das Ergebnis dann in eine HTML Datei schreiben will .... ist es mit Sicherheit eine gute Lösung.
 
tefla hat gesagt.:
Ich würd es z.B. auch nur bei Navigationen anwenden, wo man immer nur einen Teil der Baumes sieht. Ansonsten wird es schon zu heftig für die Datenbank. Aber es hat halt viele Vorteile und wenn er das Ergebnis dann in eine HTML Datei schreiben will .... ist es mit Sicherheit eine gute Lösung.
Ja schon. Aber mein Favorit ist hier ganz klar wieder das NestedSet-Modell. Gerade bei Menüstrukturen (die ja im Verhältnis häufiger gelesen als verändert/aktualisiert werden) bietet sich das Modell doch an. ;o)
 
Sehe ich das richtig, das wenn du in dem Modell ein Menüpunkt änderst, ein großteil aller Menüpunkte geändert werden muss ?
 
Zurück