dynamisches Menü

E

elgo

hallo

ich bin gerade dabei ein dynamisches menü zu erstellen das aus einer datenbank ausgelesen wird
das menü besteht aus ober- und unterpunkten die jeweils auf verschieden ebenen liegen

das heißt

oberpunkt eins hat im mysql tabellenfeld : layer = 0 stehen
unterpunkt 1 : layer = 1
unterpunkt 2 : layer = 2

usw

es ist also ebenenmässig aufgebaut

bis dahin gibts kein problem allerdings brauche ich eine weiter ordnungs id (layer_id) die mir sagt welcher unterpunkt zu wechem oberpunkt gehört . damit kann der punkt bestimmt werden :

layer =2 also in der zweiten ebenen layer_id = 5 d.h. gehört zu oberopunkt 5 muss also nach oberpunkt 5 ausgelesen werden

mein problem ist jetzt die schleife die das gesamte menü in der richtigen reihenfolge ausliest . es muss allegemein sein

hat jemand vielleicht einen gedankenanstoß für mich ? hab grad ein dickes brett vorm kopf :|

greets
 
Zuletzt bearbeitet von einem Moderator:
in einer schleife wirst du das nicht lösen können.
Gibt mehrere Möglichkeiten.

1. Du schrebst es in die Db genau in der Reihenfolge
wie es dargestellt werden soll.

2. Du liesst die komplette DB aus in nen array oder direkt mit fetch_array und ordnest den array nach wunsch

3. Oder du liesst Schritt für Schritt aus


mfg Little
 
wenn ich da an meine Bildergalerie denke... da hab ich das so gemacht:
Eine Tabelle für die Kategorien mit einem Feld 'sub_von'. In dieses Feld kommt die ID der Kategorie, der die aktuelle Kategorie untergeordnet ist.
Bsp: Hauptkategorie1 hat die ID 1. Unterkategorie1 und Unterkategorie2 (ID 2 bzw. 3) sind Unterkategorien von Hauptkategorie1 und bekommen damit folglich im Feld 'sub_von' eine 1 eingetragen. Jetzt könnte man auch einer Unterkategorie eine weitere Unterkateogrie zuordnen. Dann müsste man z.B., um eine Unterkategorie für Unterkategorie2 zu erstellen, bei 'sub_von' eine 3 eintragen.
Ich hoffe du hast das Ganze verstanden?!

Ein Code zum Auslesen könnte dieser hier sein:
PHP:
function list_kat($id=0) {
	static $ebene=0;
	$sql=mysql_query("SELECT * FROM tabelle WHERE sub_von='".$id."'");
	if(mysql_num_rows($sql)>0) {
		while($row=mysql_fetch_array($sql)) {
			$id=$row['kat_id'];
			echo '+';
			echo str_repeat("+",$ebene);
			echo ' '.$row['bezeichnung'];
			$ebene++;
			list_kat($id);
			$ebene--;
		}
	}
}

Dann kommt z.B. sowas raus:
Code:
+Hauptkategorie1
++Unterkategorie2
++Unterkategorie3
+++Unterkategorie4
+Hauptkategorie2
...

Ich denke, das könnte dir nützlich sein!
 
genau so etwas hab ich gesucht

allerdings funktioniert das skript nicht ganz

warum rufst du innerhalb der function list_kat die function list_kat auf

kannst du mir nochmal helfen

greets
 
elgo, rekursive funktion

nur muss ich dazu sagen das die Funktion ein totaler
krampf ist und super performance intensiv ist.

Würd ich von abraten.
 
mh , rekursive funktion

das läuft bei mir aber irgendwie nicht : wenn ich die zeile

function list_kat($id = 0) {

}

nicht weglasse wird überhaupt nichts angezeigt

wenn schon nur teilweiße

@littlex

ich wüsste nichts anderes weiß nicht wie das mit dem ordnen in der mysql ablaufen soll . das ganze soll so dynamisch wie möglich bleiben . die schleife scheint ein ganz guter anfang zu sein

vielleicht kannst du mir deine alternative etwas näher vorstellen
 
*hust* das ist eine funktion die du aufrufen musst
mit dem syntax: list_kat();

zu meinen alternativen.
Ich würd überdenken ob ich du umbedingt die Menu struktur in einer mysql DB speichern willst.
Ich halte die Idee für etwas übertrieben.

Wenn doch würde ich zu meiner zweiten Idee (siehe oben) tendieren.

Einfach die Tabellen in einzelne Arrays auslesen und dann mit den Arrays arbeiten. Ist schneller und Flexibler.
 
naja en totaler Krampf ist die Funktion nun wirklich nicht! Ist eigentlich eine der einfachsten rekursiven Funktionen, die man schreiben kann. Performanceintensiv vielleicht... aber ein Krampf?!

@elgo
du baust einfach da, wo du die Ausgabe haben willst den Befehl list_kat(); ein...
 
rekursive funktion

nur muss ich dazu sagen das die Funktion ein totaler
krampf ist und super performance intensiv ist.

Widerspruch :-) Es gibt genug Beispiele die das Gegenteil beweisen.

@elgo Um mal was zu Thema zu sagen - lies dir mal mein Tut hier durch - ich hoffe hilft weiter

Und damit der Arme sich nicht totsucht, setzt der liebe Mod hier noch den Link rein ;) http://www.tutorials.de/tutorials27144.html
 
Zuletzt bearbeitet von einem Moderator:
Zurück