2014-01-30 63 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