thinkphp5 栏目无限分类的写法

共公为模型、控制器、模板三部分代码。
其中pid是无限分类重要的一点,pid的值指向上级分类的id。

数据库结构

thinkphp5 栏目无限分类的写法

模型

定义了一个Model,实现栏目分类功能

public function catetree()
    {
        $cateres = $this->select();
        return $this->sort($cateres);
    }  

    #栏目排序
    public function sort($data,$pid=0,$level=0)
    {
        #level在排序中并没有作用,而是用于前端输出时,判断Level后,添加  ─  这种让分类明显的符号
        static $arr= array();
        foreach($data as $k=>$v){
            if($v['pid'] == $pid){ #循环出顶级分类
                $v['level'] = $level;
                $arr[] = $v;
                $this->sort($data,$v['id'],$level+1); #递归查询 $v['id'] 当前栏目id,因为子栏目的pid一定等于当前栏目id;如果是下一级栏目,给level+1
            }
        }
        return $arr;
    }

catetree里面的$cateres = $this->select()只是读取出来所需要的分类。然后交给sort处理排序问题
sort的排序里有非常细的标注,如果个人的数据表中已经有level字段,那么这里可以将level去掉

控制器

$cate = new CateModel();
$cateres = $cate->catetree();

$this->assign('cateres',$cateres);
return view('Template/catelst');

这块的作用其实就是使用刚才定义的Model中的catetree方法,并输出到模板

模板

<select name="pid">
                                    <option value="0">顶级栏目</option>
                                    {volist name='catelst' id='vo'}
                                    <option value="{$vo.id}"><?php echo str_repeat('─',$vo['level']*2) ?>{$vo.catename}</option>
                                    {/volist}
                                </select>

<?php echo str_repeat('─',$vo['level']*2) ?>这个的作用便是在下级栏目前加这个符号,*2指加几个就改成几个

运行效果

thinkphp5 栏目无限分类的写法

评论

大侠名号:   验证暗号: 点击我更换图片

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND