EDYCJA: Po wielkiej odpowiedzi @ vadim-ashikhman. Koniec pytania.aktualizacja drzewa zestawu gniazd z php i nestable.js jquery plugin
Resources Używam:
- PHP Framework CodeIgniter
- zagnieżdżony zestaw Biblioteka: https://github.com/olimortimer/ci-nested-sets/
- biblioteki jQuery: http://dbushell.github.io/Nestable/
udało mi się dodać kategorie i podkategorie bez jakiś problem.
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.
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
- użyłem rozwidleniu gniazdowa biblioteki.js, bo miał funkcję, która mogłaby uzyskać pozycję (https://github.com/BeFiveINFO/Nestable/)
- Kod Javsascript:
$('#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
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
Zgadzam się z @North - proszę wyraźniej wyjaśnić swój problem/sytuację. – sitilge
Użyj tej wtyczki na podstawie jQuery UI [nestedSortable] (https://github.com/ilikenwf/nestedSortable) – DarkMaze