2015-06-11 9 views
11

EDIT: Nach der großen Antwort der @ Vadim-Ashikhman. Das Ende der Frage.update nestet gesetzt Baum mit PHP und nestable.js jquery Plugin

Ressourcen Ich verwende:

ich es geschafft, Kategorien und Unterkategorien hinzuzufügen, ohne irgendein Problem.

---- Photo database

Ich war auch in der Lage mit nestbarer jQuery-Bibliothek mit allen Kategorien das Menü anzeigen.

So weit so gut.

Menu

Jetzt, wenn ich versuche, durch Drag zu sortieren und ablegen. Captured das gesamte Array, hier ein Beispiel:

[{ 
 
    "id": 1, 
 
    "children": [{ 
 
    "id": 2, 
 
    "children": [{ 
 
     "id": 3 
 
    }, { 
 
     "id": 6 
 
    }, { 
 
     "id": 5 
 
    }, { 
 
     "id": 7 
 
    }, { 
 
     "id": 9 
 
    }] 
 
    }, { 
 
    "id": 8, 
 
    "children": [{ 
 
     "id": 10, 
 
     "children": [{ 
 
     "id": 11 
 
     }, { 
 
     "id": 12 
 
     }, { 
 
     "id": 13 
 
     }, { 
 
     "id": 14 
 
     }, { 
 
     "id": 15 
 
     }] 
 
    }, { 
 
     "id": 16, 
 
     "children": [{ 
 
     "id": 17 
 
     }, { 
 
     "id": 18 
 
     }, { 
 
     "id": 19 
 
     }, { 
 
     "id": 20 
 
     }] 
 
    }] 
 
    }, { 
 
    "id": 22, 
 
    "children": [{ 
 
     "id": 23 
 
    }, { 
 
     "id": 24 
 
    }, { 
 
     "id": 25 
 
    }, { 
 
     "id": 26 
 
    }] 
 
    }, { 
 
    "id": 27, 
 
    "children": [{ 
 
     "id": 28 
 
    }, { 
 
     "id": 29 
 
    }, { 
 
     "id": 30 
 
    }, { 
 
     "id": 31 
 
    }] 
 
    }, { 
 
    "id": 32 
 
    }, { 
 
    "id": 39 
 
    }, { 
 
    "id": 40 
 
    }] 
 
}]

aber nicht, wie die Positionen zu aktualisieren, das hat mich verblüfft, ich fast 16 Stunden dauerte Tests läuft, aber ohne Ergebnis.

  • Ich habe versucht, die gleichen Daten mit den linken und rechten Feldern neu zu ordnen.
  • Auch ich habe versucht, den Tisch zu reinigen und das Menü erneut hinzuzufügen.

Ohne irgendein günstiges Ergebnis.

Also ich komme zu dir um zu sehen, ob du mir helfen kannst.

EDIT: Nach dem großen Antwort der @ vadim-ashikhman

$('#nestable').nestable({ 
 
      group: 1, 
 
      maxDepth :6 
 

 
     }).on('dragEnd', function(event, item, source, destination, position) { 
 
\t  // Make an ajax request to persist move on database 
 
\t  // here you can pass item-id, source-id, destination-id and position index to the server 
 
\t  // .... 
 
\t  var parent_id = $(item).parent().parent().data('idcata'); 
 
\t  var actual_id = $(item).data('idcata'); 
 
\t  var prev_id = $(item).prev("li").data('idcata'); 
 
\t  var page_id = $(item).data('pagina-id'); 
 

 
\t  console.log("id "+ actual_id + "\nParent: "+ parent_id +"\nPosition:" + position + "\nPrev : " + prev_id + "\nPagina_id: "+page_id); 
 

 
\t  $.ajax({ 
 
       type: "POST", 
 
       dataType: "json", 
 
       url: '<?=site_url("admin/categories/ordenar")?>', 
 
       data: { 
 

 
        id:actual_id, 
 
        parent_id:parent_id, 
 
        position:position, 
 
        prev_id:prev_id, 
 
        page_id:page_id, 
 
       }, 
 
       cache: false, 
 
       success: function(data) { 
 

 
        if(data.data==1) 
 
         alert('Guardado!!'); 
 
        else 
 
         alert('No se ha podido guardar la posición'); 
 
    
 
        }, 
 
        error: function() { 
 
        alert('No se ha podido guardar la posición'); 
 
        } 
 
      }); 
 

 
\t });

  • -Code PHP:

$idcata  = $this->input->post('id'); 
 
\t $newParentId = $this->input->post('parent_id'); 
 
\t $newPosition = $this->input->post('position'); 
 
\t $prevId  = $this->input->post('prev_id'); 
 
\t $page_id  = $this->input->post('page_id'); 
 

 
\t $this->nested_set = new Nested_set(); 
 
\t $this->nested_set->setControlParams('nested_set_tree'); 
 
\t $categoria = $this->nested_set->getNodeFromId($idcata); 
 
\t $categoriaPadre = $this->nested_set->getNodeFromId($newParentId); 
 

 
\t if($newPosition == 0){ 
 
\t \t $newCategoria = $this->nested_set->setNodeAsFirstChild($categoria,$categoriaPadre); 
 
\t }else{ 
 

 
\t \t $prevCategoria = $this->nested_set->getNodeFromId($prevId); 
 
\t \t $newCategoria = $this->nested_set->setNodeAsNextSibling($categoria,$prevCategoria); 
 
\t }

TADA !!! Und es funktioniert perfekt

+0

Ich kann nicht herausfinden, was Ihre Frage ist und welches Ergebnis Sie erwarten. Bitte beschreiben Sie mehr, was Sie wollen. Möchten Sie das JSON-Format zum Generieren des Menüs verwenden? – North

+0

Stimmen Sie mit @North überein - erklären Sie bitte deutlicher Ihr Problem/Ihre Situation. – sitilge

+1

Verwenden Sie dieses Plugin basierend auf jQuery UI [nestedSortable] (https://github.com/ilikenwf/nestedSortable) – DarkMaze

Antwort

3

Wenn Sie einen Knoten an die neue Position verschieben, erhalten neue Position vorherigen Knoten und übergeordneten Knoten:

  1. Wenn vorherigen Knoten nicht gefunden Einsatz Knoten als erstes Kind von Eltern bewegt.
  2. Wenn der vorherige Knoten gefunden, verwenden Sie einfach setNodeAsNextSibling() Methode aus der Bibliothek.

Sie müssen den gesamten Baum nicht erfassen und aktualisieren.

+0

Danke Vadim Ashikhman, funktioniert perfekt !!! – jcarlosweb