我正在使用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