nestable дърво с лява и дясна стойност

Нестабилна дръжка на дървовидна структура с лява и дясна стойност Вече направих функционалността за добавяне на родителски възел, дъщерен възел и изтриване на възел. Но как да запазите стойността на дървото след преместване на възли, плъзнете и пуснете с nestable.js

За да не видя резултата си какво искам да направя....

въведете описание на изображението тук

искам да управлявам със стойности отляво и отдясно на данни

И структурата на моята база данни е

въведете описание на изображението тук

Моля, помогнете в това как да управлявате функцията за плъзгане и пускане.


person user3146706    schedule 30.01.2014    source източник


Отговори (1)


Опитах се да коментирам това, но уебсайтът ми казва, че имам нужда от 50 репутация, за да го направя, така че това може или не може да отговори на въпроса ви, ще трябва да изчакам, докато се прибера, когато мога да си играя с нещо подобно в базата данни / Javascript структура.

Доста съм запознат с таблиците left/right_id и подобни. Първото място, където ги видях, беше в phpBB3.0 и прекарах много време в четене за тях.

Едно нещо, което можете да направите, за да ви помогне да ускорите заявките си, е да добавите колона parent_id, като по този начин можете незабавно да получите ВСИЧКИ дъщерни бележки, без да се налага да използвате "left_id > 1 И right_id ‹ 8" във вашите SQL изрази.

Сега, за вашия javascript въпрос, как ще се опитам да направя това, когато се прибера, е да декларирам масив от id ключове => дъщерни стойности. Така че в примера за екранна снимка, който сте дали по-горе, можете да се надяваме да стигнете до нещо подобно

array(

    2 => array(
       5 => array(
          3
        ),
       6
    ),
    3 => array(
      8
    ),
    4
)

За да получите това, ще трябва да преминете през DOM за всеки член на списъка, като използвате техните идентификатори и функцията array.push, за да добавите стойности, ако е необходимо.

Ще се опитам да помогна повече, след като мога да стигна до дома си, където имам настройка на PHP сървър, но това трябва да ви даде идея как да започнете.

Използвате ли някаква Javascript рамка (като MooTools, jQuery)?

Редактиране: И така, работих по него от доста време и имам общо нещо, което работи. По-долу е кодът, който е пряко отговорен за преминаване през DOM дървото и присвояване на леви/десни_ид стойности. Трябва да е доста лесно да го редактирате по ваш вкус.

Имам предпочитания към MooTools, така че написах това с помощта на библиотеката mootools (тя предлага някои функции на Element, които са доста хубави и всъщност ми даде многостепенен инструмент за плъзгане и сортиране, с който да тествам това). Ако предпочитате да използвате друга библиотека, трябва да е доста лесно да превключите кода, за да работи за нея, но аз не използвам jQuery, така че за съжаление не съм полезен в това отношение

Връзка за изтегляне на всички включени файлове: Тук

function calculate_ids(el,left_id, parent_id){

            var el = $(el);
            //makes the element a MooTools Element

            var left_id = left_id || 1;
            //If left_id is given, we are using this function recursively

            var parent = parent_id || 0;
            //Gives us a quick method in order to figure out what level we are currently on

            var id_array = {};
            /*ID array object will look like
                {
                    1:{
                        'left_id':1,
                        'right_id':2,
                        'parent':0
                    },
                    2:{
                        'left_id':3,
                        'right_id':6,
                        parent_id:0
                    },
                    3:{
                        'left_id':4,
                        'right_id':5
                    },
                    etc.
                }
            */

            var els = el.getChildren('li');
            //Get the immediate children

            els.each(function(child){

                var id = child.get('id');
                //The ID

                var descendants = child.getElements('li');
                //Gets ALL most descendent children that match the format, these are ordered the way they are in the DOM

                var right_id = left_id + descendants.length * 2 + 1

                id_array[id] = {
                    'left_id':left_id,
                    'right_id':right_id,
                    'parent':parent
                };
                if(descendants.length > 0){
                    //There are child elements to this thing, recursion!
                    id_array = Object.merge(id_array, calculate_ids( child.children[0], left_id + 1, id) );
                }

                left_id = right_id + 1;
                //Increment the left_id counter
            });

            return id_array;

        }

вече известни проблеми

Примерният код, който публикувах, не изчислява правилно левите/десните идентификатори, след като са били изчислени за първи път или преместени нагоре/надолу ниво, ако са били изчислени преди това. Предполагам, че това има нещо общо с това как класът за многостепенно сортиране премества елементите. Този код е предназначен да служи като отправна точка. Наистина съм зает (за съжаление), така че може или не може да успея да коригирам този проблем в бъдеще, но така или иначе този код трябва да послужи като чудесна отправна точка.

person Jhecht    schedule 30.01.2014
comment
Ще ми спести малко време незабавно, ако можете да споделите своя HTML/Javascript код, за да добавяте/премествате елементите. Ако не, благодарим ви за търпението. - person Jhecht; 01.02.2014