Thinkphp如何实现无限级分类?

本文和大家分享的主要是thinkphp实现无限级分类相关内容,一起来看看吧,希望对大家学习thinkphp有所帮助。

普通的方法(采用forforeach

//显示

foreach($data as $k=>$v){

//str_repeat()函数用于把字符串重复指定的次数

$data[$k]['title']=str_repeat('---',$v['type']-1).$v['title'];

}

  无限级分类的设计思路:

  为了能够使得栏目的管理更加动态化,在这里可以设置添加栏目,添加的数 据 库中设计一个名为pid的字段,便于新添加的栏目可以找到他的父栏目。如果是顶级的栏目,则pid0。再提取数据显示的时候,后台数 据 库中设置有type字段,用于标识该栏目的等级,在数据显示的时候用str_repeat()函数在前面加上‘-----’,来区分他们的等级。

  这个时候的排序显得非常的重要,并且此方法没办法很好的把父级和子级联系在一起,不建议使用

排序

  添加的时候为了更加方便的直观的显示哪个栏目下有什么子栏目,可以选择在里面设置一个sorts排序字段,用于排序。在前端,为了能够方便排序。需要表单提交全部的排序的内容。前端的话只需要在表单inputname属性里加入一个数组名

<input type="hidden" name="id[]" value="{$arr.id}"/>

<input type="text" value="{$arr.sorts}" style="width: 40px;height: 40px;text-align: center" name="sorts[]"/>

  然后后台进行接受,同样用forforeach进行循环操作和遍历

//把新的获得的排序的信息储存到数据库中

$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即可。

 

 

来源:博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值