Clansuite Community Forum

 
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
 
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Tree/Menu mit Nested Set Model  (Gelesen 3950 mal)
0 Mitglieder und 2 Gäste betrachten dieses Thema.
Vyper
Neuling
*
Online Online

Beiträge: 13


« am: Dezember 23, 2008, 04:27:07 »

Hiho,

bin zur Zeit am Implementieren des Nested Set Models bei einem eigenen Softwareprojekt.
Das Hinzufügen, Löschen und Verschieben von einzelnen Knoten klappt schon einwandfrei.
Mein Problem ist derzeit das Verschieben eines kompletten Teilbaumes auf einen anderen Elternknoten.

Google hat mir bisher dazu eher unbefriedigende Antworten geliefert und die Nested_Sets_Class von PEAR will ich eigentlich nicht nutzen.

Mein Gedankengang sieht bisher so aus:
  • left_id und right_id den Elementes holen, welches verschoben werden soll
  • Daraus die Differenz right - left + 1 bilden
  • right_id der übergeordneten Seiten der aktuellen Seite mit der Differenz subtrahieren
  • Alle nachfolgenden Elemente so anpassen, als wäre der Teilbaum garnicht mehr vorhanden (sowohl left_id als auch right_id mit ermittelten Differenz anpassen)
  • Beim neuen Elternelement Platz schaffen -> right_id + Differenz
  • Alle nachfolgenden Elemente um die Differenz anheben (left und right)

Kann das so gehen? Hab jetzt schon so viel herumprobiert. Das oben geschriebene ist erstmal das, was ich mir im Kopf ausgemalt habe, um nicht noch einen Fehlschag zu riskieren... Unentschlossen

Hier erstmal bissl Grundlagen Vermittlung, damit jeder weiß worum es geht: http://www.klempert.de/nested_sets/

Wenn die ganze Geschichte dann bei mir läuft, wäre ich durchaus bereit, das ganze auf den MenuManager von Clansuite anzuwenden, da die riesigen Performancevorteile bei dem Model einfach auf der Hand liegen. Lächelnd
Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #1 am: Dezember 25, 2008, 02:52:10 »

Im Prinzip sind es die letzten drei Schritte:
- den Ast, der verschoben werden soll, aus der Hierachiestruktur freistellen, aber nicht löschen
- an der Zielposition eine Lücke mit dem Umfang des Astes erstellen
- den Ast in diese Lücke einhängen (durchorganisieren) = in die Hierarchie aufnehmen

Du findest Code-Beispiele in folgenden Threads:
http://www.traum-projekt.com/forum/19-traum-dynamik/108209-nested-sets-teilb-ume-verschieben.html
http://www.hannebauer.org/content/view/49/

Für den Clansuite MenuManager wäre sowas auch schön. Dabei müssen wir allerdings die konkrete Implementierung nicht selbst erledigen, denn Doctrine bringt den abstrahierten Umgang mit Nested Sets / Tree's in Form von Vorlagen mit.

Doctrine + Umgang mit Nested Sets
http://www.doctrine-project.org/documentation/manual/1_0/en/one-page#hierarchical-data:nested-set
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
Vyper
Neuling
*
Online Online

Beiträge: 13


« Antworten #2 am: Dezember 25, 2008, 02:16:17 »

Supi - thx, hab es hinbekommen.
Bin jetzt nur noch am Ummodeln vom Sortieren von Knoten - hatte mir die Sache zunächst bissl zu einfach gemacht...
Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #3 am: Dezember 25, 2008, 02:37:38 »

Du kannst ja mal Deine Implementierung fürs Sortieren posten.

Da der MenuManager läuft, würde ich vorschlagen, wir versuchen das Forum mit Nested Sets.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  


Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines

Google visited last this page Heute um 02:11:21