я использую Jstree JQuery плагин для отображения категорий в виде дерева.
А в бэкэнде я использую etrepat / Баум Пакет laravel для создания категорий вложенных множеств.
etrepat / Баум пакет имеет метод с именем 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 / Баум Соответствующий формат, который 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
чтобы минимизировать количество данных.
С наилучшими пожеланиями,
Иван
Других решений пока нет …