1.创建表 必须要的字段 id shop pid 默认pid为0;
//在添加视图中: //用jquery输出 $('#pid').val(); => 选中后输出值为'{$val.id}' 当前选中的主键id; //那么 pid是等于 主键id 的; //假如 id等于1 pid默认为0 ,进行添加后 pid等于id //那么第二条数据 id=2 pid就等于1; 重点: 上级栏目: <select name="pid" id="pid"> <option value="0">顶级栏目</option> {volist name='shop' id='val'} <option value="{$val.id}">{$val.shopname}</option> {/volist} </select><br> 栏目名称:<input type="text" name="shopname" id="shopname"><br>
2.无限极分类已经完成,接下来将层次显示出来;
//在模型中写入方法; namespace app\bkadmin\model; use think\Collection; use think\Model; /* $result 数组的集合; pid 当前的父级id level 设置分类之间的显示提示; */ //无限极分类; &:引用传递,这个符号不要缺少; public static function wu(&$result=[],$pid=0,$level=0){ //默认查询pid为0是所有的数据; $res = ShopModel::where(['pid'=>$pid])->select(); //将显示提示标识加2; $level += 2; // 将这些数据进行循环; foreach($res as $k => $v){ //给每条数据中的栏目名称前面加一个标识,然后赋值给一个变量; $catename = '|--'.$v['catename']; //然后在在这个心变量前面在加一个显示提示;(在前面加两个空格); $v['catename'] = str_repeat("_",$level).$catename; //将处理好的结果放入到数组集合中; $result[] = $v; //默认pid为0的这一级已显示; //递归;用静态方法调用自己继续将下一级提示显示出来; self::wu($result,$v['id'],$level); } // return ($result); //将结果$result数组先转为对象,然后在转成数组; return Collection::make($result)->toArray(); }
3.另外一种无限极层次显示;
public function catetree(){ //查询所有数据; $data=$this->select(); return $this->sort($data); } /* $data 接收上面查询到的所有数据; pid 当前的父级id level 设置分类之间的显示提示; */ public function sort($data,$pid=0,$level=0){ static $arr=array(); foreach ($data as $k => $v) { if($v['pid']==$pid){ $v['level']=$level; $arr[]=$v; //$pid是等于主键id的; $this->sort($data,$v['id'],$level+1); } } return $arr; } //html中的代码; <select name="pid"> <option value="0">顶级栏目</option> {volist name="cateres" id="cate"} <option value="{$cate.id}"> {if condition="$cate['level'] neq 0"}|{/if}<?php echo str_repeat('-', $cate['level']*4)?> {$cate.catename} </option> {/volist} </select>