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 09 PHP
支持中文的php加密解密类代码
Nov 27 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
PHP设置进度条的方法
Jul 08 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
PDO::errorInfo讲解
Jan 28 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 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快递单号查询接口使用示例
2014/05/05 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
调试php程序的简单步骤
2019/10/04 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
Python map和reduce函数用法示例
2015/02/26 Python
使用python实现生成用户信息
2017/03/20 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
销售自荐信
2013/10/22 职场文书
挂职自我鉴定
2014/02/26 职场文书
幼儿园新年寄语
2014/04/03 职场文书
教师业务培训方案
2014/05/01 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
Go语言基础知识点介绍
2021/07/04 Golang