2014-01-30 50 views
3

左值和右值的可嵌套树结构句柄 我已经完成了添加父节点,子节点和删除节点的功能。 但如何保存树值移动节点后,拖动并与nestable.js左值和右值的可嵌套树

免得落看到我的输出就是我想做的事....

enter image description here

我想和数据管理-left,数据正确的价值观

和我的数据库结构

enter image description here

请帮助我们了解如何管理拖放功能。

回答

2

我想评论这一点,但该网站告诉我,我需要以50声望这样做,所以这可能会或可能不会回答你的问题,我必须等到我回到家的时候,我可以拨弄数据库/ Javascript结构中类似的东西。

我很熟悉left/right_id表等。我看到他们的第一个地方是phpBB3.0,我花了很多时间阅读它们。

有一两件事你可以做些什么来帮助你加快你的查询是添加PARENT_ID列,这样你可以立即获得所有的子笔记,而无需使用SQL语句“left_id> 1 AND right_id < 8”。

现在,对于你的javascript问题,当我回家时我将如何尝试去解决这个问题,就是声明一个id keys => child值的数组。因此,在截图比如你在前面已经给出,你可能希望得到这样的事情

array(

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

为了得到这一点,你会通过DOM对列表中的每个成员必须循环,使用他们的ID和array.push函数根据需要添加值。

一旦我可以到达我的家我已经有一个PHP服务器设置,我会尽力帮助更多,但是这应该给你一个如何让它开始的想法。

您是否使用任何Javascript框架(如MooTools,jQuery)?

编辑: 因此,我已经研究了很长时间,并且我已经有了一些常规工作。以下是直接负责循环DOM树和分配左/右ID值的代码。根据自己的喜好编辑它应该相当容易。

我对MooTools有偏好,所以我使用mootools库编写了它(它提供了一些元素功能,相当不错,实际上给了我一个多级拖动和排序工具来测试这个)。如果你喜欢使用另一个库,它应该是相当容易的切换代码为它工作,但我不使用jQuery,所以我很遗憾没有帮助在这方面

链接下载所有相关文件:Here

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; 

     } 

已知问题

的示例代码我张贴,他们已经计算出的第一时间或向上/向下移动一个级别后,不能正确地计算左/右IDS如果他们计算先前。我猜这与多级排序类如何移动项目有关。此代码旨在用作起点。我真的很忙(不幸),所以我将来可能会也可能不会解决这个问题,但是无论哪种方式,这个代码应该是一个很好的起点。

+0

如果您可以请分享您的HTML/Javascript代码来添加/移动项目,它会为我节省一点时间。如果没有,那么感谢你的耐心。 – Jhecht