PHP / MySQL Baumstrukturmenü erstellen

7

Ich versuche, aus meiner Datenbank in PHP und MySQL eine unbestückte Liste zu erstellen.

Ich habe ein Array von Seitenobjekten, die ich von der Datenbank zurückgebe. Jedes Seitenobjekt verfügt über das Attribut "parent_id", das auf null gesetzt wird, wenn es kein übergeordnetes Element hat. So sehen die Seitenobjekte aus:

%Vor%

Wenn es möglich ist, möchte ich es nicht rekursiv tun und nur einmal auf die Datenbank zugreifen, da ich das Menü bei fast jeder Anfrage erstellen werde. Ich möchte eine Funktion erstellen, an die ich einfach mein Array von Objekten übergeben kann und die HTML-Liste zurückgibt.

    
imns 10.12.2010, 22:14
quelle

3 Antworten

14

Ich mag die @ mario-Lösung und habe sie verbessert, indem ich die überschüssige <ul> verhindert habe. Ich würde nur empfehlen, eine ORDER BY auf Ihre SQL-Abfrage zu tun, um das Menü in der gewünschten Reihenfolge zu erhalten (könnte sogar empfehlen, dass eine Gewicht / Sequenz-Spalte zum Schema hinzugefügt wird.

Dateneinstellung:

%Vor%

Handhabung:

%Vor%

Ausgabe:

%Vor%
    
Brad Christie 10.12.2010, 22:54
quelle
3

Ich habe mit dieser Lösung ( Pastebin-Referenz ) angefangen:

%Vor%

Beispieldaten:

%Vor%

Verwendung:

%Vor%     
imns 20.12.2010 23:30
quelle
2

Anstatt die Datenbank rekursiv abzufragen, können Sie einfach alle Einträge herausziehen und die Ausgabefunktion rekursiv machen. Es ist oft so trivial wie:

%Vor%

Es ist nur wichtig, <ul> s in <li> zu verschachteln. Oder verwenden Sie einfach HTML und lassen Sie das schließende </li> weg.

Tatsächlich druckt dies zu viele <ul> s, also würde ich nach Existenz von Unterebenen suchen und vermeiden, es direkt zu drucken.

    
mario 10.12.2010 22:27
quelle

Tags und Links