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调用Oracle存储过程的方法
Sep 12 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
Aug 06 PHP
php实现的zip文件内容比较类
Sep 24 PHP
php通过Chianz.com获取IP地址与地区的方法
Jan 14 PHP
自己写的php curl库实现整站克隆功能
Feb 12 PHP
10个php函数实用却不常见
Oct 13 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
php好代码风格的阶段性总结
Jun 25 PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 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
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
php实现微信公众号无限群发
2015/10/11 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
实现前后端数据交互方法汇总
2015/04/07 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
JS实现前端缓存的方法
2017/09/21 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
在微信小程序中保存网络图片
2019/02/12 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
JavaScript使用localStorage存储数据
2019/09/25 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
C#和SQL Server的面试题
2016/08/12 面试题
网上书店创业计划书
2014/01/12 职场文书
志愿者服务感言
2014/02/27 职场文书
班主任新年寄语
2014/04/04 职场文书
认购协议书范本
2014/04/22 职场文书
国际贸易实训报告
2014/11/05 职场文书
建国大业观后感600字
2015/06/01 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
vue 把二维或多维数组转一维数组
2022/04/24 Vue.js