无限级分类实现(基于thinkphp框架)

无限级分类表设计如下

无限极分类呈现出树状怎么做?首先我们要排序,即子导航排在父导航的下面,比如如下

上面的子栏目是汽车精品的子导航,所以它排在汽车精品的下面,这样的话,我们就需要另外做一个排序方法了,不用select这个方法了,select方法默认是按id来排序的,比如我们的这些导航是放在goods_cate这张表中的,我们就新建一个CateModel.class.php模型,用来操作这个表,代码如下

<?php
namespace Admin\Model;
use Think\Model;
class CateModel extends Model{
	 protected $trueTableName = 'goods_cate'; 
	 public function reSort(){
	 	$allCategorys=$this->select();
	 	return $this->_reSort($allCategorys);
	 }
	 
	 public function _reSort($data,$parent_id=0,$level=0){
	 	static $_ret=array();
	 	foreach($data as $k=>$v){
			if($v['pid']==$parent_id){
				$v['level']=$level;
				$_ret[]=$v;
				unset($data[$k]);//循环完这个数组之后就把它给删了,下次就不用循环它了,提高性能
				$this->_reSort($data,$v['cid'],$level+1);
			}
		}
		return $_ret;
	 }
	 
	 
}

上面的level是用来计算循环的层数的,你的导航在第几层,我们的level就是几,我们的模板就是利用这个level来输出几个“-”这样的字符的

然后实例化这表的时候,就要排好序,用这个模型的resort方法来排序,如下

排好序之后的数据再传给我们的模板,给我们的模板来实现树状就行了,我们后台要排好序,然后模板来实现前端效果,我们的模板怎么处理?如下

<volist name="cate" id="list">
    		<option value="{$list.cid}"><php>echo str_repeat('-',$list['level']*2);</php>{$list.cname}</option>
    	</volist>	

 Str_repeat函数的用法如下

效果如下

 我们做无限极分类的时候,选择父类的时候不能把它的子类作为它的父类,所有选择父类的时候要判断一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值