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者的疑难问答(2)
Oct 09 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
深入了解PHP类Class的概念
Jun 14 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
php异步多线程swoole用法实例
Nov 14 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
浅谈php fopen下载远程文件的函数
Nov 18 PHP
PHP实现文件上传功能实例代码
May 18 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 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简单静态页生成过程
2008/03/27 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
ajax在joomla中的原生态应用代码
2012/07/19 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
php实现微信支付之退款功能
2018/05/30 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
2019/05/27 PHP
让您的菜单不离网站
2006/10/03 Javascript
JAVASCRIPT keycode总结
2009/02/04 Javascript
javascript数组的使用
2013/03/28 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
详解Python多线程
2016/11/14 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python线程创建和终止实例代码
2018/01/20 Python
python 从list中随机取值的方法
2020/11/16 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
HTML5实现预览本地图片
2016/02/17 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
介绍一下Make? 为什么使用make
2013/12/08 面试题
怎么写自荐书范文
2014/02/12 职场文书
美食节目策划方案
2014/05/31 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
自我推荐信格式模板
2015/03/24 职场文书
小学生禁毒教育心得体会
2016/01/15 职场文书