Hallo,
ich möchte für jeden User eine eigenes Menü, welches aus einer Datenbank generiert werden soll. Dieses Menü soll eine Baumstruktur haben, nun habe ich mir überlegt das jeder menü eintrag eine id hat, und jeder untereintrag zu einem eintrag hat genau die gleiche id, also so ungefär:
user | id | parent_id | Name
1 | 1 | 0 | Menü1
1 | 2 | 0 | Menü2
1 | 1 | 1 | Untermenü1 zu Menü1
1 | 2 | 1 | Untermenü2 zu Menü1
1 | 1 | 2 | Untermenü1 zu Untermenü2
Der Ansatz ist schon mal fast perfekt. :-)
Jedoch sollte die ID eindeutig sein und nicht per Level definiert sein. (was machst Du mit 2fachen Untermenüs?) Also so:
user | id | parent_id | Name
1 | 1 | 0 | Menü1
1 | 2 | 0 | Menü2
1 | 3 | 1 | Untermenü1 zu Menü1
1 | 4 | 1 | Untermenü2 zu Menü1
1 | 5 | 2 | Untermenü1 zu Untermenü2
Jetzt hab ich keine Ahnung wie ich das mit PHP machen soll, weil ich es zudem noch in eine Funktion packen wollte. Ich find irgendwie keinen Anhaltspunkt.
Stichwort rekursive Funktionen. Sagt Dir das was? Lasse einfach eine Funktion rekursiv über alle Einträge drüberlaufen und ordne jedem Eintrag die eine Zahl zu, wie weit dieser Eingerückt ist.
Das Ergebnis sollte dann so aussehen:
Name | ID | Einrückung
Menü1 | 1 | 0
Untermenü1 zu Menü1 | 3 | 1
Untermenü2 zu Menü1 | 4 | 1
Menü2 | 2 | 0
Untermenü1 zu Menü2 | 5 | 1
Dann kannst Du daraus die Ausgabe zusammenbasteln (wie immer Du auch willst)
Grüße,
Christian
P.S.:
noch eine kleine Anregung: wie wäre es, wenn Du die Menü's generell vergibst und den Benutzern dann über eine Tabelle verschiedene Rechte gibst?
Also z.B.
Tabelle 1: Menü
id | parent_id | Name
1 | 0 | Menü1
2 | 0 | Menü2
3 | 1 | Untermenü1 zu Menü1
4 | 1 | Untermenü2 zu Menü1
5 | 2 | Untermenü1 zu Untermenü2
Tabelle 2: Benutzer
id | Name
1 | Administrator
2 | Sonstwas
Tabelle 3: Zuordnung (jeder Eintrag bedeutet: Recht ist da)
benutzer_id | menue_id
1 | 1
1 | 2
1 | 3
1 | 4
1 | 5
2 | 1
2 | 3
2 | 4
So darf dann der Benutzer Administrator auf die Punkte 1-5 zugreifen und der Benutzer Sonstwas nur auf die Punkte 3-4.