NestedSet - Algorithmus gesucht

Menü mit Nested Sets

Zuerst: Grosses Lob an Jörg :) ! , ich habe seit langem versucht ein Menü mit Nested-Sets aufzubauen, bin aber oft daran gescheitert. Inzwischen habe ich eine "rudimentäre" Lösung, bei der ich mich von unten alle Parents emporhangle und je nach Bedarf (das ist für jeden Level einstellbar) die Siblings ausgebe oder nicht.
Das funktioniert auch Wunderbar. Für den Aufbau verwende ich das Feld [Norder] um die richtige Reihenfolge der [Nodes] zu haben.

Wenn ich allerdings Nodes umsortiere (MoveBranch etc.) dann wird das Feld [Norder] nicht mehr so befüllt, sie ich es erwarte (überall steht der Wert 6). Dadurch fällt meine Menü durcheinander, was erst durch manuelles Edieren des Feldes [Norder] wieder zu beheben ist. :(

Gibt es bei MoveBranch eventuell einen Bug oder verstehe ich den Sinn des Feldes [Norder] falsch? Mein Verständnis ist, das [Norder] immer die Reihenfolge der Nodes innerhalb eines Branch wiederspiegelt.

Ciao und Danke

Christian
 
norder ist nur für die Root Nodes wichtig. Das NestedSet Modell in seiner reinen Form geht von einem Wurzelknoten aus. Man kann dann anhand der leftID's ordnen.

Wenn man aber mehrere Wurzeln haben möchte, muss man diese auf eine andere Art und Weise sortieren, denn jede Wurzel ist für sich genommen ein eigenes NestedSet.

Ciao, Jörg
 
Hi. Demnächst werde ich ein kleines Update herausbringen.

Zum einen gibt es ein Problem mit getAllNodes(). Die Sortierung kann da momentan nicht anhand der Sortierung der Wurzelknoten vorgenommen werden (wie einige schon bemerkt haben). Ich habe aber schon eine Idee, wie ich das beheben kann.

Zum anderen sind wichtige Funktionen hinzugekommen:
dem Attribut $additionalSQL das jeder get Methode übergeben werden kann, kann ein weiteres Array Entry übergeben werden, und zwar order.
man kann also jetzt auch andere Ordnungen vorgeben als die natürliche Ordnung, die in der DB liegt.
Aktuell programmiere ich nämlich ein Forum, dass sowohl threaded als auch Flat ausgegeben werden kann. Bei der flat Ansicht muss ich allerdings alle Replies anhand des Datums sortieren, wann die Antworten eingefügt wurden.

So ... also bis bald.

Ciao, Jörg
 
Zurück