thinkphp5无限级分类分类的操作

这里的分类主要是在于获取上级分类的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调用层级不等于(顶级栏目)就循环输出|----

这样列表和添加栏目中的分类显示样式就出来了。

标签: thinkphp5无限级分类

发表评论:

whatsapp营销