2015-06-11 14 views
11

EDYCJA: Po wielkiej odpowiedzi @ vadim-ashikhman. Koniec pytania.aktualizacja drzewa zestawu gniazd z php i nestable.js jquery plugin

Resources Używam:

udało mi się dodać kategorie i podkategorie bez jakiś problem.

---- Photo database

Byłem także w stanie wyświetlić menu ze wszystkich kategorii z biblioteki jQuery zdolną do zagnieżdżania.

Jak dotąd tak dobrze.

Menu

Teraz, gdy próbuję uporządkować przeciągnij i upuść. Uchwycił całą tablicę, oto przykład:

[{ 
 
    "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 
 
    }] 
 
}]

Ale nie jak zaktualizować pozycje, to ma mnie zaskoczony, wziąłem prawie 16 godzin uruchamiania testów, ale bez rezultatu.

  • Próbowałem ponownie zamówić te same dane w polach lewej i prawej.
  • Próbowałem również wyczyścić stół i ponownie dodać menu.

Bez żadnych korzystnych wyników.

Więc przyszedłem do ciebie, aby zobaczyć, czy możesz mi pomóc.

EDIT: Po wielkim odpowiedź znaku @ 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 });

  • Kod 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 !!! I działa idealnie

+0

Nie mogę określić, jakie jest twoje pytanie i jakiego wyniku się spodziewasz. Opisz więcej, czego chcesz. Czy chcesz wygenerować menu za pomocą formatu JSON? – North

+0

Zgadzam się z @North - proszę wyraźniej wyjaśnić swój problem/sytuację. – sitilge

+1

Użyj tej wtyczki na podstawie jQuery UI [nestedSortable] (https://github.com/ilikenwf/nestedSortable) – DarkMaze

Odpowiedz

3

Po przesunięciu węzła do nowej pozycji, dostać nową pozycję i poprzedni węzeł węzeł nadrzędny:

  1. Jeśli poprzedni węzeł nie znaleziono wkładka przeniósł węzeł jako pierwsze dziecko rodzica.
  2. Jeśli poprzedni węzeł został znaleziony, po prostu użyj metody setNodeAsNextSibling() z biblioteki.

Nie musisz przechwytywać i aktualizować całego drzewa.

+0

Dzięki Vadim Ashikhman, działa idealnie !!! – jcarlosweb