NestedSets und Menüpunkte :)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • NestedSets und Menüpunkte :)

    Hallo,
    ich habe mit Hilfe des Nested-Sets Tutorials versucht ein Nested-Set Modell aufzubauen.
    Das Modell funktioniert soweit auch ganz gut. Nur beim Hinzufügen von Unterpunkten habe ich mühe.
    Also bis hier gehts:
    PHP-Code:
    1 Punkt
      1 Punkt
      2 Punkt
      3 Punkt 
    Hier komme ich nicht mehr weiter. Wenn ich nun einem Unterpunkt noch einen Unterpunkt hinzufügen will, referenziere ich immer auf den, mit der root_id (1 Punkt in diesem Fall) und somit setzt er die Nummerierung fort und fängt nicht bei 1 an:
    PHP-Code:
    1 Punkt
      1 Punkt
      2 Punkt
          4 Punkt
          5 Punkt
             6 Punkt
      3 Punkt 
    etc.
    Wie kann ich dies nun richtig Verknüpfen?
    Hier der Code:

    PHP-Code:
    /**
    * @function     Adds a new item to the menu
    *
    * @param        $item_name        Name of the item, which gets added
    * @param        $parent_item    Id of the parent item (category)
    **/
    function addItem($item_name$parent_item)
    {
        
    $query "SELECT * FROM kf_menu WHERE node_id = '".$parent_item."'";
        
    $last_id = new Query($query);
        if(
    $last_id->error()) {
            echo 
    "<pre>\n";
            echo 
    $last_id->getError();
            echo 
    "</pre>\n";               
            die();
        }
        
    $row_last_id $last_id->fetch();
                
        
    $query_maxordering "SELECT max(ordering) as ordering FROM kf_menu WHERE root_id = '".$row_last_id['root_id']."'";
        
    $max_ordering = new Query($query_maxordering);
        if(
    $max_ordering->error()) {
            echo 
    "<pre>\n";
            echo 
    $max_ordering->getError();
            echo 
    "</pre>\n";               
            die();
        }
        
    $row_max_ordering $max_ordering->fetch();
            
        
    $next_ordering $row_max_ordering['ordering'] + 1;
                
        
    $query_insert "LOCK TABLES kf_menu WRITE";
        
    $add_item = new Query($query_insert);
        
        
    $query_insert "UPDATE kf_menu SET lft = lft + 2 WHERE root_id = '".$row_last_id['root_id']."' AND lft > '".$row_last_id['rgt']."' AND rgt >= '".$row_last_id['rgt']."'";
        
    $add_item = new Query($query_insert);
        
        
    $query_insert "UPDATE kf_menu SET rgt = rgt + 2 WHERE root_id = '".$row_last_id['root_id']."' AND rgt >= '".$row_last_id['rgt']."'";
        
    $add_item = new Query($query_insert);
        
        
    $query_insert "INSERT INTO kf_menu ( root_id, payload, lft, rgt, ordering ) VALUES ( '".$row_last_id['root_id']."', '".$item_name."', '".$row_last_id['rgt']."', '".$row_last_id['rgt']."' + 1, '".$next_ordering."' )";
        
    $add_item = new Query($query_insert);
        
        
    $query_insert "UNLOCK TABLES";
        
    $add_item = new Query($query_insert);
        
        if(
    $add_item->error()) {
            echo 
    "<pre>\n";
            echo 
    $add_item->getError();
            echo 
    "</pre>\n";               
            die();
        }
        else
        {
            return 
    'ITEM ADDED';
        }

    Edit: Also mein Problem ist die korrekte Referenzierung der
    root_id's. Ich arbeite zum Sortieren mit der Spalte "Ordering".
    Momentan ist das Skript so aufgebaut, dass ich die übergeordnete
    Kategorie ($parent_item) angebe und mich auf diese beziehe:

    1. Letze ID holen
    2. Höchstes Ordering-Feld holen (wobei root_id die id des
    Parent-Items ist)

    Das Problem ist nun, wenn ich für eine Unterkategorie eine
    Unterkategorie anlegen will, dann bezieht sich das Script ja auf die
    root_id, also auf das Element, welches im Feld "lft" den Wert 1 hat.
    Ich müsste quasi angeben, dass ich das ausgewählte Element als "root_id" angesehen wird. Nur wie mache ich dies?

    Vielen Dank & Gruss
    Zuletzt geändert von OnTheRun; 14.02.2005, 12:22.

  • #2
    lesen!
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar

    Lädt...
    X