这里的分类主要是在于获取上级分类的pid,分类层级操作用到了level;
这里要用到M层,建立两个方法。
public fucntion catetree(){
$cateres=this->select();//获取数据库数据;这里获得数据可以把C层的获取数据操作用对象方法的方式实现。
return $this->sort($cateres);//传递数据到sort方法里
}
public fucntion sort($data,$pid=0,$level=0){//sort()是上面方法中传递过来的数据,$data为所有数据,$pid=0为pid为0的数据,$level为层级
//下面的操作有点模糊,可以慢慢理解
static $arr=array()//静态化空数组
foreach($data as $k=>$v){//循环数据库数据
if($v['pid'])==$pid){//如果获取pid的值等于pid
$v['level']=$level;//则这个值的层级就等于这一层,后面输出的时候可以加1获得下一层;这里可以假设0为顶级,1为0的下一层级
$arr[]=$v;//把数据插入数组中
$this->sort($data,$v['id],$level+1);//获得方法中的相应值
}
}
return $arr;//返回数组数据
}
承接上面操作,控制器C中的可以实例化对象,在调用M层的获取数据方法。
public function lst(){
$cate=new CateModel();
$cateres=$cate->catetree();//调用M层方法获取数据库数据
$this->assign('cateres',$cateres);
return view();
}
public function add(){
$cate=new CateModel();//实例化
if(request()->isPost()){
$data=input('post.');
$add=$cate->save($data);
if($add){
$this->success('添加成功',url('lst'));
}else{
$this->error('添加失败');
}
return;
}
$cateres=$cate->catetree();/调用M层方法获取数据库数据
$this->assign('cateres',$cateres);
return view();
}
这时候可以在V层输出level的层级属性,模板中用“-”来凸显出来
`{if condition="$cate['level'] neq 0"}|{/if}<?php echo str_repeat('-',$cate['level'])*4?>{$cate.catename}`
这里的if意思是如果cate调用层级不等于(顶级栏目)就循环输出|----
这样列表和添加栏目中的分类显示样式就出来了。