PHPTree――php快速生成无限级分类


Posted in PHP onMarch 30, 2018

它就是PHPTree。

git地址:https://git.oschina.net/jiusem/PHPTree.git

或从三水点靠木下载 https://3water.com/codes/606002.html

最简单的例子:

<?php 
require('PHPTree.class.php');

//原始数据, 从数据库读出
$data = array(
	array(
		'id'=>1,
		'name'=>'book',
		'parent_id'=>0
	),
	array(
		'id'=>2,
		'name'=>'music',
		'parent_id'=>0
	),
	array(
		'id'=>3,
		'name'=>'book1',
		'parent_id'=>1
	),
	array(
		'id'=>4,
		'name'=>'book2',
		'parent_id'=>3
	)
);

$r = PHPTree::makeTree($data);
echo json_encode($r);

?>

输出:

  [
        {
            "id": 1,
            "name": "book",
            "parent_id": 0,
            "expanded": false, //不展开子节点
            "children": [
                {
                    "id": 3,
                    "name": "book1",
                    "parent_id": 1,
                    "expanded": false,
                    "children": [
                        {
                            "id": 4,
                            "name": "book2",
                            "parent_id": 3,
                            "leaf": true
                        }
                    ]
                }
            ]
        },
        {
            "id": 2,
            "name": "music",
            "parent_id": 0,
            "leaf": true
        }
]

生成的数据就是树形结构了,可以结合ExtJS等前端框架来使用了。git中包含了一个ExtJS的demo,大家可以参考。

演示:

PHPTree――php快速生成无限级分类

如果不需要使用前端框架,只是用HTML输出,可以使用下面的方法:

$r = PHPTree::makeTreeForHtml($data);

得到一个一维数组,用 level 字段来标识分类的层次:

array(
 array(
  'id'=>1,
  'name'=>'用户管理',
  'parent_id'=>0,
  'level'=>0 //一级分类
 ),
 array(
  'id'=>1,
  'name'=>'用户列表',
  'parent_id'=>1,
  'level'=>1 //二级分类
 )
 ....
);

输出为select标签:

echo '<h1>PHPTree树形结构</h1>';
echo '<select style="width:300px;">';
foreach($r as $item){
	echo '<option>';
	//根据所在的层次缩进
	echo str_repeat('......',$item['level']);
	echo $item['name'];
	echo '</option>';
}
echo '</select>';

演示:

PHPTree――php快速生成无限级分类

git中包含了一个输出HTML的demo,大家可以参考。

关于数据库的设计,只需要保证包含 id 和 parent_id 字段即可,其他字段可以自行添加,不会影响数据生成。parent_id是父级ID,如果是一级分类,就设为 0 。当然,字段也是可以配置的。请继续往下看,我将介绍一些进阶的使用方法。

展开子节点:

PHPTree::makeTree( $data, array(
 'expanded' => true
));

输出的数据为:

[
        {
            id:1,
            name:'book1',
            expanded:true,//展开子节点
            children:[
                ...
            ]
        }
]

自定义主键和父键:

//数据库读出
$data = array(
 array(
  'order_id'=>1, //主键
  'name'=>'book1',
  'pid'=>0, //父键
  ...
 )
);
PHPTree::makeTree( $data, array(
 'primary_key' => 'order_id',
 'parent_key' => 'pid'
));

输出的数据为:

[
        {
            order_id:1,
            name:'book1',
            pid:0,
            ...
        }
]

makeTreeForHtml 方法也支持配置主键和父键。

还有其他字段也可以自定义,但下面这些参数仅支持 makeTree 方法:

$r = PHPTree::makeTree($data, array(
 'expanded_key' => 'expanded',
 'children_key' => 'children',
 'leaf_key'  => 'leaf'
));

默认,这些字段的配置都是以ExtJS为参考的,如果你使用zTree框架的话,这些字段就需要重新配置了。

zTree 是一款强大的国产树形框架,它还支持 简单JSON格式,是一维数据格式,实际上就不需要用到PHPTree了。当然,PHPTree输出的数据层次感清晰,zTree也是支持的。

PHP 相关文章推荐
PHP中的日期及时间
Nov 23 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
Dec 18 PHP
Windows下安装Memcached的步骤说明
Apr 25 PHP
php Smarty 字符比较代码
Feb 27 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
php获取字段名示例分享
Mar 03 PHP
thinkphp学习笔记之多表查询
Jul 28 PHP
php技巧小结【推荐】
Jan 19 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
thinkPHP框架RBAC实现原理分析
Feb 01 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 #PHP
PHP实现动态删除XML数据的方法示例
Mar 30 #PHP
PHP实现动态添加XML中数据的方法
Mar 30 #PHP
PHP实现动态创建XML文档的方法
Mar 30 #PHP
php实现微信模板消息推送
Mar 30 #PHP
Mac系统下安装PHP Xdebug
Mar 30 #PHP
php实现websocket实时消息推送
Mar 30 #PHP
You might like
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
Joomla开启SEF的方法
2016/05/04 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
php源码的安装方法和实例
2019/09/26 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JavaScript获取表单内所有元素值的方法
2015/04/02 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
浅析Bootstrap表格的使用
2016/06/23 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
Angular2中select用法之设置默认值与事件详解
2017/05/07 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
python读取注册表中值的方法
2013/04/08 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
中间件分为哪几类
2012/03/14 面试题
剪枝的学问教学反思
2014/02/07 职场文书
高校教师自荐信范文
2014/03/13 职场文书
社区消防工作实施方案
2014/03/21 职场文书
考试诚信承诺书
2014/05/23 职场文书
优秀员工评优方案
2014/06/13 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
2014年社区宣传工作总结
2014/12/02 职场文书
vue 自定义组件添加原生事件
2022/04/21 Vue.js