创建无限极分类树型结构的简单方法


Posted in PHP onJune 20, 2017

先上效果图

创建无限极分类树型结构的简单方法

顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类。

接下来看具体实现的代码:

一、在控制器中按字段查询,查询出所有分类信息(id:该分类的ID值,cate_name:该分类的名称,pid:父ID,sorts:为显示标题顺序排序做准备,可不写。)

public function cate_display()
  {
    $cate = D('Cate'); 
    $field = array('id','cate_name','pid','sorts');
    $list = $cate->allCategory($field);
    $this->assign('list',$list);
    $this->display();
  }

二、模型中的代码

在对应控制器的模型中创建两个方法

1.查询所有分类信息,并调用生成分类树方法:

public function allCategory($field='*'){
     $data = $this->field($field)->select();
     return $this->tree($data);
   }

2.生成分类树(使用递归,传进去数据,以及pid[父类id],level[层数,用来控制显示的-数量]两个变量,初始值为零)

public function tree($data,$pid=0,$level=0){
    static $tree = array();
    foreach($data as $k=>$v){
      if($v['pid'] == $pid){
        $v['level'] = $level;
        $tree[]=$v;
        $this->tree($data,$v['id'],$level+1);
      }
    }
  
    return $tree;
  }

三、视图文件中的代码

<div class="form-group">
        <label for="pid" class="col-sm-2 control-label no-padding-right">上级菜单</label>
        <div class="col-sm-6">
          <select name="pid" style="width: 100%;">
            <option selected="selected" value="0">顶级菜单</option>
            <volist name="row" id="val"> 
              <option value="{$val.id}"><?php echo str_repeat('-',$val['level']*4); ?>{$val.cate_name}
              </option> 
            </volist> 
          </select>
        </div>
      </div>

这样,一个可以无限递归的分类树形结构就完成了,总结:核心思想还是模型中的递归函数,先传进去pid默认为零,以后每次递归传入的pid就是上级的id,level用来记录递归层数,最后在视图页面显示时,调用PHP内置函数str_repeat(),用来重复输出'-‘以达到输出时区分级数的效果。

以上这篇创建无限极分类树型结构的简单方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP与javascript对多项选择的处理
Oct 09 PHP
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
PHP静态类
Nov 25 PHP
php下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
关于php fread()使用技巧
Jan 22 PHP
url decode problem 解决方法
Dec 26 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
PHP时间和日期函数详解
May 08 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
Mar 09 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 #PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 #PHP
PHP中模糊查询并关联三个select框
Jun 19 #PHP
在laravel中使用Symfony的Crawler组件分析HTML
Jun 19 #PHP
Laravel给生产环境添加监听事件(SQL日志监听)
Jun 19 #PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 #PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 #PHP
You might like
PHP新手上路(十)
2006/10/09 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
javascript动态加载三
2012/08/22 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python字符遍历的艺术
2008/09/06 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
基于python的字节编译详解
2017/09/20 Python
Python AES加密实例解析
2018/01/18 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Python小进度条显示代码
2019/03/05 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python conda操作方法
2019/09/11 Python
python设置随机种子实例讲解
2019/09/12 Python
介绍一下.net和Java的特点和区别
2012/09/26 面试题
Servlet如何得到客户端机器的信息
2014/10/17 面试题
求职者简历中的自我评价
2013/10/20 职场文书
奥运会口号
2014/06/13 职场文书
少先队辅导员事迹材料
2014/12/24 职场文书
校长新学期寄语2016
2015/12/04 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书