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:
- PHP Framework Codeigniter
- Nested Set Library: https://github.com/olimortimer/ci-nested-sets/
- jQuery-Bibliothek: http://dbushell.github.io/Nestable/
ich es geschafft, Kategorien und Unterkategorien hinzuzufügen, ohne irgendein Problem.
Ich war auch in der Lage mit nestbarer jQuery-Bibliothek mit allen Kategorien das Menü anzeigen.
So weit so gut.
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
- verwendete ich ein Fork der Bibliothek nestbarer.js, denn er hatte eine Funktion, die die Position (https://github.com/BeFiveINFO/Nestable/)
- -Code Javsascript bekommen konnte:
$('#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
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
Stimmen Sie mit @North überein - erklären Sie bitte deutlicher Ihr Problem/Ihre Situation. – sitilge
Verwenden Sie dieses Plugin basierend auf jQuery UI [nestedSortable] (https://github.com/ilikenwf/nestedSortable) – DarkMaze