无限级分类表设计如下
无限极分类呈现出树状怎么做?首先我们要排序,即子导航排在父导航的下面,比如如下
上面的子栏目是汽车精品的子导航,所以它排在汽车精品的下面,这样的话,我们就需要另外做一个排序方法了,不用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函数的用法如下
效果如下
我们做无限极分类的时候,选择父类的时候不能把它的子类作为它的父类,所有选择父类的时候要判断一下。