dedlfix: Array mit Nested Set Werten zu Html-Liste/Menu verarbeiten

Beitrag lesen

Tach!

Wenn du noch eine Idee hast wie ich es ohne Änderung der DB-Abfrage hinkriege, immer her damit! ;)

Ist die Left-Right-Kette durchgängig, oder sind da aufgrund von Abfragebedingungen Lücken drin? (Ist aber nicht tragisch, nur im Lösungsweg etwas ungünstiger.) Ich würde jedenfalls nicht von den Rechts-Werten sondern hauptsächlich von den Links-Werten ausgehen. Die müssen auch aufsteigend sortiert sein (in jedem Fall, auch bei Lücken).

Bei lückenlos:

  • Wenn Links +1 kleiner als Rechts bleibt, dann (nach der Ausgabe) absteigen (Rechts-Wert als Parent-Rechts-Parameter mitgeben), ansonsten hast du ein Blatt (Links +1 = Rechts).
  • Ist Rechts gleich Parent-Rechts -1, dann nach oben zurückkehren.
    Rekursion hilft dir, die Parent-Rechts-Werte in lokalen Variablen abzulegen, und wieder auf sie zugreifen zu können, egal wie oft du inzwischen abgestiegen bist. Ansonten brauchst du einen Stack, um die jeweiligen Parent-Werte abzulegen.

Ich würde nicht versuchen wollen, in der Schleife vorwärts zu laufen und dann erst feststellen, dass ich mich nun in einem Nachbarn vom Parent befinde und eigentlich vorher hätte zurückkehren müssen. Das lässt sich allerdings nicht vermeiden, wenn du Lücken in den Links-Rechts-Werten hast. Denn mit Lücken kannst du teilweise nicht feststellen, dass du das letzte Blatt des aktuellen Zweiges vorliegen hast (sprich: der Vergleich auf Gleichheit von Rechts +1 mit dem Parent-Rechts ist nicht durchführbar). In dem Fall wirst du feststellen, dass Links größer als Parent-Rechts ist und solltest daraufhin in deiner Schleife über das Array einen Schritt zurückgehen sowie die aktuelle Rekusionsebene verlassen. Eine weiter oben gehst du wieder vorwärst, stellst fest, ob du ein Blatt hast oder immer noch der Parent-Rechts kleiner ist, und machst dann dasselbe: Blatt ausgeben oder wie bereits beschrieben einen Stufe nach oben gehen.

Das heißt, immer schön in Einzelschritten laufen und nicht mehrere Ebenen nach oben zu springen versuchen. Falls durch Bedingungen Parent-Nodes fehlen, aber dessen Kinder enthalten sind, hast du ein Problem. Du kannst (meines Erachtens) nicht feststellen, wieviel Parents fehlen und hättest auch ein Problem, die Kinder an die passende Ebene in deiner Ausgabe einzubauen, denn auch da fehlen ja die Eltern. Die Kinder rutschen dann zwangsläufig nach oben, je fehlendem Elter eine Ebene.

dedlfix.