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生成html分页列表的代码
Mar 18 PHP
PHP与MySQL开发中页面乱码的产生与解决
Mar 27 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php使用curl出现Expect:100-continue解决方法
Mar 03 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
ecshop适应在PHP7的修改方法解决报错的实现
Nov 01 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
如何让PHP编码更加好看利于阅读
May 12 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更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jQuery中wrapInner()方法用法实例
2015/01/16 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
详解微信小程序-canvas绘制文字实现自动换行
2019/04/26 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python 合并文件的具体实例
2013/08/08 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
python删除列表内容
2015/08/04 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
简单了解python 邮件模块的使用方法
2019/07/24 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
广播节目策划方案
2014/05/23 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
课外活动实习计划
2015/01/19 职场文书
财产保全担保书
2015/01/20 职场文书
公务员处分决定书
2015/06/25 职场文书
羊脂球读书笔记
2015/06/30 职场文书
导游词之井冈山
2019/11/20 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang