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 相关文章推荐
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
Apr 25 PHP
php实现的常见排序算法汇总
Sep 08 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
Jan 04 PHP
php实现统计网站在线人数的方法
May 12 PHP
PHP时间类完整实例(非常实用)
Dec 25 PHP
php字符串操作针对负值的判断分析
Jul 28 PHP
学习PHP Cookie处理函数
Aug 09 PHP
php实现购物车产品删除功能(2)
Jul 23 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 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
PHP实现图片自动清理的方法
2015/07/08 PHP
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
javascript阻止scroll事件多次执行的思路及实现
2013/11/08 Javascript
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
详解webpack进阶之loader篇
2017/08/23 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
python实现自动更换ip的方法
2015/05/05 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python 日期排序的实例代码
2019/07/11 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
解释一下抽象方法和抽象类
2016/08/27 面试题
应用心理学个人求职信范文
2013/12/11 职场文书
中学家长会邀请函
2014/02/03 职场文书
幼儿教师培训感言
2014/03/08 职场文书
汽车促销活动方案
2014/03/31 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
详解MySQL InnoDB存储引擎的内存管理
2021/04/08 MySQL
Redis如何一键部署脚本
2021/04/12 Redis