artnv/tree-builder
邻接表
0.2
2019-01-17 21:17 UTC
This package is auto-updated.
Last update: 2024-09-18 19:33:43 UTC
README
php v0.2
js v0.1.1
用于构建嵌套列表(邻接表)的库。可以用于创建菜单、分类列表、嵌套评论、面包屑导航等。
功能
- 嵌套级别无限制
- 数组中的元素可以不连续,即子元素可以位于父元素之上或之下
- 库提供两种版本,PHP和JavaScript
示例: https://artnv.github.io/tree-builder/index.html
更多示例在 /php/ 目录中
安装
通过Composer
composer require artnv/tree-builder
或者
"artnv/tree-builder": "^0.2"
在文件 composer.json 中 require
部分添加
PHP
$tb = TreeBuilder::create($dataArr, null, null, false); // create($inputArr, $aliases = null, $userParams = [], $sort_enabled = true);
构建树的输入数据
必填字段: id
、parent
、title
和 position
(如果使用排序)
$dataArr[] = [ 'id' => 1 'parent_id' => 0 'img' => '123.jpg' 'name' => 'Category #1' 'keywords' => '' 'description' => '' 'position' => 2 ];
别名
来自不同源的数据字段名称不同,为了不更改它们,只需将它们作为值指定为键。
如果未传递别名作为参数,则使用默认值
$aliases = [ 'id' => 'id', 'parent' => 'parent', 'title' => 'title', 'child' => 'child', 'position' => 'position', ];
用户参数
将在 rootNode 和 childNode 模板方法中可用
$userParams = [];
排序
$sort_enabled = true;
默认为 true。为了使排序工作,数组中必须有键 ['position']
,如果没有,则禁用排序。
对于每个只有一个父元素的节点 ['parent_id']
,位置从0开始,按数字从大到小排序。
树的格式化模板
目录中已有现成的示例 HtmlTree.php
和 SelectTree.php
,如果您需要自定义模板,则从 TreeBuilder 继承并实现接口 TreeBuilderInterface,该接口有两个方法
子节点
childNode($item, $childNodes, $aliases, $nestingLevel, $userParams);
$item
- 当前数组元素$childNodes
- 当前父元素的子节点$aliases
- 别名$nestingLevel
- 嵌套级别(基于此值可以添加用于视觉格式化的线条)$userParams
- 用户参数
根节点
rootNode($nodes, $firstStart, $userParams);
$nodes
- 这是 childNode() 返回的数据$firstStart
- true,在首次启动时$userParams
- 用户参数
使用示例
$node_1 = ['parent' => 24]; $node_2 = ['id' => 888];
$tb->getTree()
- 返回关联数组$tb->showTree()
- 根据模板返回 html 树$tb->getParents($node_1)
- 返回包含父节点链的关联数组,类似于“面包屑”$tb->getChilds($node_2)
- 返回特定节点的后代的关联数组
JavaScript
var tb = new TreeBuilder();
- 调用构造函数tb.setData(data);
- 设置包含数据数组的对象tb.getTree();
- 返回新的对象数组tb.showTree();
- 根据对象数组创建格式为 html(ul -> li)的树
tb = new TreeBuilder(); tb.setData([ { id : 1, title : 'Electronics', parent : 0 }, { id : 2, title : 'Audio', parent : 1 } ]); console.log( tb.getTree() ); // array document.write( tb.showTree() ); // <ul><li>Electronics</li><ul><li>Audio</li></ul></ul>