如何从etrepat/baum-laravel包导出jstree所需的json格式



我正在使用jstree jQuery插件将Categories显示为树视图。

在后台,我使用etrepat/baum-laravel包来创建类别嵌套集。

etrepat/baum包有一个名为toHierarchy()的方法,它返回一个表示查询树的嵌套集合。

返回的格式如下:

    {  
   "7":{  
      "org_level_id":7,
      "parent_id":5,
      "lft":7,
      "rgt":12,
      "depth":0,
      "name":"Computer",
      "created_at":"2015-11-02 00:45:01",
      "updated_at":"2015-11-02 00:45:01",
      "children":[  
         {  
            "org_level_id":14,
            "parent_id":7,
            "lft":8,
            "rgt":9,
            "depth":1,
            "name":"hard",
            "created_at":"2015-11-02 00:45:01",
            "updated_at":"2015-11-02 00:45:01",
            "children":[  
            ]
         },
         {  
            "org_level_id":13,
            "parent_id":7,
            "lft":10,
            "rgt":11,
            "depth":1,
            "name":" RAM",
            "created_at":"2015-11-02 00:45:01",
            "updated_at":"2015-11-02 00:45:01",
            "children":[  
            ]
         }
      ]
   },
   "9":{  
      "org_level_id":9,
      "parent_id":2,
      "lft":20,
      "rgt":23,
      "depth":0,
      "name":"search engines",
      "created_at":"2015-11-02 00:45:01",
      "updated_at":"2015-11-02 00:45:01",
      "children":[  
         {  
            "org_level_id":18,
            "parent_id":9,
            "lft":21,
            "rgt":22,
            "depth":1,
            "name":"Google",
            "created_at":"2015-11-02 00:45:01",
            "updated_at":"2015-11-02 00:45:01",
            "children":[  
            ]
         }
      ]
   },
   "17":{  
      "org_level_id":17,
      "parent_id":10,
      "lft":25,
      "rgt":26,
      "depth":0,
      "name":"Download",
      "created_at":"2015-11-02 00:45:01",
      "updated_at":"2015-11-02 00:45:01",
      "children":[  
      ]
   }
}

另一方面,JStree插件需要一种json格式,比如从中创建树视图:

[
   'Simple root node',
   {
     'text' : 'Root node 2',
     'state' : {
       'opened' : true,
       'selected' : true
     },
     'children' : [
       { 'text' : 'Child 1' },
       'Child 2'
     ]
  }
]

如何将etrepat/baum的返回格式转换为jstree所需的适当格式?

您可以在客户端或服务器端执行此操作。这里有一个在服务器端实现的简单功能:

// $tree is the result of the toHierarchy assuming it is a JSON string
// if it is not - skip this json_decode step
$tree = json_decode($tree, true);
function parse($data) {
  $temp = [];
  foreach ($data as $id => $v) {
    unset($v['parent_id']);
    $v['id'] = $id;
    $v['text'] = $v['name'];
    if (count($v['children'])) {
      $v['children'] = parse($v['children']);
    }
    $temp[] = $v;
  }
  return $temp;
}
$tree = json_encode(parse($tree));
// now tree contains data that jstree will happily work with

生成的JSON对象将与jstree完美配合。当然,您可以使用unset剥离不需要的属性,以最大限度地减少数据量。

致以最良好的问候,
Ivan

最新更新