Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Hilfe bei Rekursion!

Hallo,
ich brauche dringend einen Denkanstoß bei meinem kleinen Script.

Es geht um die Ausgabe des MenüPfades. Die horizontale, vertikale und Tree Ausgabe funktioniert aber bei der Ausgabe des Pfades habe ich ein Problem und komme irgendwie nicht weiter.

Es zeigt mir immer von der Wurzel alle Zweige und den oder die nächsten Zweige.

hier mal meine DB:

Code:                   In Zwischenablage kopieren (nur IE)
1">

hier mal mein Script:
Code:                   In Zwischenablage kopieren (nur IE)
2">

P.S. es ist nicht besonders sauber geschrieben, aber das werde ich noch machen. Eigentlich nur ein Test für eine Class.

Bitte, bitte, bitte Hilfe!
Hier gehts zum Orginal Eintrag "Hilfe bei Rekursion!" im Forum

Antworten

Hallo,

hat keine eine Idee? Oder liegt es an meiner Erklärung?

Hilfe!


2.

nur soviel: dein code scheint recht wenig sinn zu machen, weil du hier lediglich eine einzige abfrage hast die auch nur die zeile eines menüpunktes holt. damit kannst du doch nicht wirklich eine menüstruktur mit beliebig tiefer schachtelung erzeugen. du müsstest schon vom blatt ausgehend so lange nach einem übergeordneten knoten fragen bis du bei einem wurzelelement angekommen bist. wenn du solch eine struktur in einem rutsch abfragen willst, kommst du nicht umhin als speicherstruktur auf nested sets zu setzen (je nach anwendungszwecke ist das durchaus mit kanonen auf spatzen geschossen).


3.

OK, das an der Umsetzung noch einiges zu ändern ist, habe ich begriffen. Nested Sets hatte ich auch schon in Bestracht gezogen aber wie du schon sagst, Kanonen auf Spatzen.

Soweit hat es ja auch funktioniert. Kann menüs anzeigen mit endloser Tiefe. Mit der Rekursion habe ich auch nur gearbeitet weil ich davon ausgehe das das Menü keine "endlose Tiefe" haben wird, sondern maximal 5Ebenen.

Jetzt zum Sinn, Ich kann mir Menus ausgeben lassen in der Form eines Baums (funktioniert!), in der Form eines Klappmenüs (funktioniert!) und in der Form eines horizontalen Menüs (funktioniert!). Nur die Sache mit dem aktuellen Pfad funktioniert nicht!

Jetzt war ich der Meinung (nein, eigentlich überzeugt!), wenn die Baumstruktur, Klappmenü und die horizontale Form funktioniert, muss man doch auch einen aktuellen Pfad ermitteln können.

Den Ansatz habe ich mir nicht selbst ausgedacht, sondern von einem Tutorial über Dynamische Menüs übernommen.

Ich bin gern für Vorschläge die mich weiterbringen!

MfG


4.

du baust dein menü ja auch von der wurzel ausgehend auf. deine allererste abfrage nach aufruf von menu(0, "","egal"); ist doch "SELECT * FROM menu WHERE item_ID = 0". dann schau dir mal deine tabelle an, auf welche element das alles zutrifft.
ich würde mir ein element herauspicken (anhand der ID) und dann rekursiv nach elementen fragen welche diese ID als elternelement haben. die abfrage die ich oben zitiert habe taugt eigentlich nur um alle wurzelelemente oder alle (direkten) kinder eines knotens zu erfahren.


5.

OK, dann werde ich das ganze jetzt mal andersrum aufziegen. Ich danke dir für deinen Tip und versuchst einfach mal nach deinem Vorgehen! Bis denne!


6.

So, ich habs mir mal so durchdacht und bin zum Entschluss gekommen den aktuellen Pfad mit deiner Methode zu erzeugen.

Aber wie sieht es mit dem Klappmenu und dem Sitemap (Tree) aus? Das muss ich doch wie bisher erzeugen oder gibt es da einen weiteren Ansatz.

Du sagst, von dem Blatt zum Stamm, leuchtet mir auch ein aber wie bei einem klappmenu?

Ich will einfach nicht dahinter kommen wie man das per SELECT abfragt. Da es ja mehrere Stämme geben kann und mehhere Äste.

Im Beispiel mit dem Pfad, habe ich ja nur einen Stamm, das ist kein Problem! Aber die anderen?

Vielleicht hast du noch mal eine Sekunde und kannst mir das erklären. Besten Dank!


7.

Hallo,

sag mal, bräuchte nochmal deine Hilfe bzw. einen Denkanstoß. Brain is blocked! :(

Ich habe es jetzt mit deiner Methode probiert. Und ...

function für aktuellen Pfad - funktioniert!
function für Struktur (Sitemap) - funktioniert!
function für Childs - funktioniert!
function für Klappmenü - funktioniert noch nicht.

Hier mein neuer Versuch...
Code:                   In Zwischenablage kopieren (nur IE)
3">

Code:                   In Zwischenablage kopieren (nur IE)
4">

Code:                   In Zwischenablage kopieren (nur IE)
5">

... ich hoffe ich habe es jetzt etwas besser gemacht und so wie du sagtest!? Bitte, mein Kopp platzt gleich! Hilfe!

P.S. Achtung beim Probieren, ist EndlosRekursion! :(


8.

@ alexander: Hast keine Idee wie ich weiter machen könnte?


9.

Hallo, ist eigentlich nicht meine Art über diesen Weg zu gehen. Aber ich sitze schon zwei ganze Tage vor meinem Prob mit dem Klappmenü. Jetzt funktioniert das mit dem aktuellen Pfad und so gut, nach deiner Methode! Aber irgendwie finde ich keine Lösung für ein Klappmenü, da bekomme ich die Rekursion nicht hin.

Würde mich riesig freun wenn du nochmal könntest!

MfG M3


10.

Bitte!
Code:                   In Zwischenablage kopieren (nur IE)
6">

... damit erhalte ich leider nur den aktuellen Zweig. Wie kann ich aber den Baum mit Zweig (Ast1.2) ausgeben?

-- Baum1
----- Stamm1
------- Ast1
---------- Ast1.1
---------- Ast1.2
-- Baum2
.....

Hat keiner eine Idee wie man mir helfen kann?


11.

also ehrlich gesagt habe ich keine große lust den code zu korrigieren. du hast da ein - ähm - problem mit den rekursionen wie mir scheint, kann es aber auf anhieb ohne test nicht sagen was da nun nicht stimmt. drum hier ein älteres beispiel welches folgende tabelle ausliest:
Code:                   In Zwischenablage kopieren (nur IE)
7">

Code:                   In Zwischenablage kopieren (nur IE)
8">

auch wenn es kein guter code ist (bes. was die fehlende fehlerbehandlung angeht), sollte er dir aber zeigen wie du die rekursionen aufbauen kannst. es ist nicht notwendig das in eine klasse zu verpacken, erleichtert die handhabung aber stellenweise enorm.


12.

Klasse, werde es gleich morgen probieren und eventuell etwas abwandel wenn nötig! Aber wenn es funktionier danke ich dir schon mal im vorraus.

Schaffe es heute nicht mehr zum testen, weil schon das Eiweiß im Brain gerint und muss morgen früh raus.

Wenn s funst, bin ich dir sehr dankbar!

MfG


13.

funst, aber wie ein Klappmenü?


14.

also, mit obigem beispiel siehst du, wie du die komplette baumstruktur auslesen kannst. wie du jetzt ein klappmenu draus machen kannst... darauf kommst du alleine. ich schreibe anderer leute skripte doch nicht für umsonst...
was du noch brauchst ist eine funktion welche alle in der tabelle enthaltenen wurzeln ermittelt (tipp: solch eine funktion findest du bereits etwas weiter oben im thread). um dann ein klappmenu draus zu machen könntest du vielleicht die ausgabe anpassen und einen weiteren parameter bei der generierung der ausgabe einführen welcher beschreit welcher knoten geöffnet oder geschlossen ist. auch hier gilt wie so oft: es gibt nicht DIE EINE lösung, sondern (fast) alle wege führen nach rom!


Hier gehts zum Orginal Eintrag "Hilfe bei Rekursion!" im Forum
 
phpforum.de | Impressum