Menü mit NestedSets

aquasonic

Erfahrenes Mitglied
Hallo,

Ich muss ein Menü machen welches beliebig viele Ebenen haben sollte, die Children-Zweige sollten sicher erst nach dem klicken auf den Parent-Zweig öffnen usw. Verschieben, Sortieren, Löschen und Einfügen bzw. Unbenennen, sichtbar und undsichtbar machen sollte man diese Menüpunkte auch...

Ich habe mich mal ein bisschen umgeschaut und habe gehört dass man das mit NestedSets sehr einfach realisieren könne...

Nur leider habe ich keine Ahnung wie ich das machen sollte und ich begreiffe auch diese Erklärung auf http://www.tutorials.de/tutorials139220.html irgendwie nicht...

Könnte mir das jemand noch einmal ein bisschen erklären oder hat sogar jemand schon mal das Gleiche Problem gehabt und hat jetzt ein Script welches er mir freundlichenweise zur Verfügung stellen würde?


ich freue mich über jede Antwort und danke schonmal...:-)
 
Hi, also du hast ja den Beitrag von mir angeführt.

Also wenn du CB_NestedSet oder PEAR::DB_NestedSet verwendest musst du natürlich erst mal eine Tabelle haben. In dem oben genannten Thread war ja eine Beispiel Tabelle in einem meiner Posts.

Dann musst du in deinem Script (egal ob Admin oder Frontend) erst mal ein Objekt ableiten und Informationen übergeben, welches Feld in der Tabelle für eine bestimmte ID steht.

Beispiel:
PHP:
<?php 
/* 
* Nested Set Klasse einfügen 
*/ 
require_once("CB_NestedSet.class.php"); 

/* 
* Nested Set Objekt für Typen anlegen 
*/ 
$params = array ( 
    'table'   => 'menu', 
    'id'      => 'nodeID', 
    'parent'  => 'parentID', 
    'root'    => 'rootID', 
    'l'       => 'leftID', 
    'r'       => 'rightID', 
    'level'   => 'level', 
    'norder'  => 'order_num' 
); 

$additional = array ( 
    'name'           => 'name' 
); 

$nestedSet = CB_NestedSet::factory($params, $additional); 
?>

In dem Array $params sind auf der linken Seite die Alias Namen, die innerhalb CB_NestedSet für die Spalten genutzt werden, auf der rechten Seite stehen die realen Namen der Spalten von deiner Tabelle.

Im $additional Array kannst du zusätzliche Felder aus deiner Tabelle übergeben, die noch zu füllen sind. Man muss diese ja CB_NestedSet bekannt machen.

In deiner Admin musst du jetzt dein Menu erzeugen. Die Formulare dazu musst du natürlich selber basteln. CB_NestedSet übernimmt nur das komplizierte Einfügen in den Baum. Wurzelknoten und Unterknoten werden mit verschiedenen Methoden eingefügt.

Naja, und dann kannst du diese Methoden zum Einfügen oder löschen nutzen um dein Admin Tool für dein Menu zu basteln.

In der Abfrage musst du wiederum wie oben beschrieben dein Objekt ableiten.

In dem anderen Thread sind auch fertige Beispiele für die Abfrage. Die rücken die Einträge auch gleich hierarchisch ein.

Aber mir kommt da gerade eine super Idee für ein Tutorial bzw einem kleinen Script. Wie wäre es mit einem Menu Generator für NestedSets? Da kann ich ja meinen Code aus Content*Builder verwenden.

Ciao, Jörg
 
Zurück