thinkphp实现无限级分类
普通的方法(采用for和foreach)
//显示
foreach($data as $k=>$v){
//str_repeat()函数用于把字符串重复指定的次数
$data[$k]['title']=str_repeat('---',$v['type']-1).$v['title'];
}
无限级分类的设计思路:
为了能够使得栏目的管理更加动态化,在这里可以设置添加栏目,添加的数据库中设计一个名为pid的字段,便于新添加的栏目可以找到他的父栏目。如果是顶级的栏目,则pid为0。再提取数据显示的时候,后台数据库中设置有type字段,用于标识该栏目的等级,在数据显示的时候用str_repeat()函数在前面加上‘-----’,来区分他们的等级。
这个时候的排序显得非常的重要,并且此方法没办法很好的把父级和子级联系在一起,不建议使用
排序
添加的时候为了更加方便的直观的显示哪个栏目下有什么子栏目,可以选择在里面设置一个sorts排序字段,用于排序。在前端,为了能够方便排序。需要表单提交全部的排序的内容。前端的话只需要在表单input的name属性里加入一个数组名
<input type="hidden" name="id[]" value="{$arr.id}"/>
<input type="text" value="{$arr.sorts}" style="width: 40px;height: 40px;text-align: center" name="sorts[]"/>
然后后台进行接受,同样用for和foreach进行循环操作和遍历
//把新的获得的排序的信息储存到数据库中
$arr=$_POST;
for($i=0;$i<count($arr['id']);$i++){
$sort=$model->find($arr['id'][$i]);
$sort['sorts']=$arr['sorts'][$i];
$model->save($sort);
}
//然后根据新的排序信息进行排序
$data=$model->order('sorts')->select();
foreach($data as $k=>$v){
$data[$k]['title']=str_repeat('---',$v['type']-1).$v['title'];
}
用递归的方法实现无限级分类
public function getCate($field='*'){
//用field查询固定字段的数据,若是没有输入实参,则默认查询全部
//获取到数据库中相关栏目的数据
$data=$this->field($field)->order('sorts asc')->select();
//调用递归函数
return $this->getTree($data);
}
//根据父级栏目的id去查询子栏目的信息
//递归函数,传入全部的栏目信息,用pid来标识栏目所对应的父级的栏目id,level来表示栏目的等级
public function getTree($data,$pid=0,$level=0){
//此处应该定义static 如果没有用static,则无法输出全部的栏目信息
static $tree=array();
foreach($data as $key=>$v){
if($v['pid']==$pid){
$v['level']=$level;
//str_repeat()函数用于把字符串重复指定的次数,用于区别栏目的等级
$v['title']=str_repeat('----',$level).$v['title'];
$tree[]=$v;
$this->getTree($data,$v['id'],$level+1);
}
}
}
在用递归函数进行无限级分类的时候建议写在model函数里,这样在控制器中只需要调用模型中的方法即可。再模型中要想调用数据库的查询操作,不用加表明,只需要在模型中使用$this即可。
thinkphp实现无限级分类的更多相关文章
- ThinkPHP无限级分类
<?php // +---------------------------------------------------------------------- // | ThinkPHP [ ...
- ThinkPHP自动填充实现无限级分类的方法
这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下 本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...
- thinkphp中如何实现无限级分类?
thinkphp中如何实现无限级分类? 一.总结 1.数据表设计+递归算法 二.php实现无限级分类实例总结 1.数据库数据如下: 2.任务需求:给一个id,求自己和所有父亲. 3.实现代码如下:th ...
- thinkphp框架中使用递归实现无限级分类
无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...
- CMSPRESS-PHP无限级分类2
原文章地址:http://www.thinkphp.cn/code/170.html 超级无限分类 使用简单 效率极高 核心代码10行不到 另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^ ...
- php无限级分类实战——评论及回复功能
经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单,可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是没有休止,从技术角度分析很 ...
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
- 一道无限级分类题的 PHP 实现
今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ( ...
- (实用篇)PHP递归实现无限级分类
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...
随机推荐
- CSS3学习系列之字体
给文字添加阴影 在CSS3中,可以使用text-shadow属性给页面上的文字添加阴影效果.text-shadow属性是在css2中定义的,在css2.1中删除,在css3的text模块中有恢复了,用 ...
- udl文件测试数据库连接
直接建一个udl后缀的文件(新建txt文件,改后缀) 然后会默认有个小电脑标志,双击打开就可以看到,可以用来配置数据库连接信息,可以测试连接,如果连接通过,可以再用记事本打开这个udl文件,里面就有生 ...
- html与xhtml有什么区别?
HTML与XHTML之间的差别,主要分为功能上的差别和书写习惯的差别两方面. 关于功能上的差别,主要是XHTML可兼容各大浏览器.手机以及PDA,并且浏览器也能快速正确地编译网页. 由于XHTML的语 ...
- Vulkan Tutorial 21 Staging buffer
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 顶点缓冲区现在已经可以正常工作,但相比于显卡内部读取数据, ...
- Sql行列转换参考
行列转换:SELECT max(case type when 0 then jine else 0 end) a,max(case type when 1 then jine else 0 end) ...
- webpackage 2.x 使用
webpackage 2.x 使用 安装---(在项目目录下) //1.初始化npm的配置(添加package.json) npm init //2.安装 webpackage npm install ...
- (转载)Apache与Tomcat 区别联系
原文链接:http://www.admin10000.com/document/974.html Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML.PHP.J ...
- Java自学手记——泛型
泛型在集合中的应用 泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时:2.避免了无谓的强制类型转换. 用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐. ...
- 打造属于自己的支持版本迭代的Asp.Net Web Api Route
在目前的主流架构中,我们越来越多的看到web Api的存在,小巧,灵活,基于Http协议,使它在越来越多的微服务项目或者移动项目充当很好的service endpoint. 问题 以Asp.Net W ...
- Hive实战之Youtube数据集
1 数据来源 本次实战的数据来自于"YouTube视频统计与社交网络"的数据集,是西蒙弗雷泽大学计算机学院在2008年所爬取的数据 数据集地址 1. 1 Youtube视频表格式如 ...