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 相关文章推荐
phpmyadmin操作流程
Oct 09 PHP
小偷PHP+Html+缓存
Dec 20 PHP
PHP中$_SERVER的详细参数与说明
Jul 29 PHP
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 PHP
php弹出对话框实现重定向代码
Jan 23 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 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下MAIL的另一解决方案
2006/10/09 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
vue中如何使用ztree
2018/02/06 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
Python中fnmatch模块的使用详情
2018/11/30 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
2014年医学生毕业自我鉴定
2014/03/26 职场文书
Python实现单例模式的5种方法
2021/06/15 Python
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS
利用Python实时获取steam特惠游戏数据
2022/06/25 Python