thinkphp5添加栏目实现select下拉option树状图结构包含二级三级栏目

控制器部分代码

// 添加栏目
	public function add()
	{
		// 判断是否从父栏目进入  fathorid
		if (input('fid')) {
			$fid = input('fid');
			// 通过添加子栏目进入,会遍历栏目
			// 实例化模型  
			$typemenu = columnModel::joinColumnChannel(); // 调用模型方法获取整个分类树  
	        $this->assign('typemenu', $typemenu); // 将分类树传递给视图 
		}else{
			$fid = 0;
		}

		$this->assign('fid',$fid);
		return $this->fetch('column/add');
	}

模型部分代码

public static function joinColumnChannel($parentId = 0)  
    {  

        // $categories = self::where('fathorid', $parentId)->select();  
        // 使用模型自身的查询构造器  
        $categories = self::alias('a') // 为user表设置别名u  
            ->join('channel c', 'a.channel_id = c.cid', 'LEFT') // LEFT JOIN channel表,并设置别名c
            ->field('a.typeid, a.typename, a.typeurl, a.channel_id, a.sort, a.fathorid, c.cname') // 指定查询的字段 
            ->where('a.isdel',0)
            ->where('a.fathorid',$parentId)
            ->order('a.sort asc') 
            ->select(); // 执行查询,返回结果集

        $tree = [];  
        foreach ($categories as &$category) {  
            $category['children'] = self::joinColumnChannel($category['typeid']); // 递归查询子栏目  
            if (empty($category['children'])) {  
                unset($category['children']); // 如果没有子栏目,则移除children键  
            }  
            $tree[] = $category->toArray(); // 转换为数组,避免视图层处理对象  
        }  
        return $tree;  
    }

视图部分代码

 {switch name='$fid'}
        {case value='0'}{/case}
        {default/}
        <div class="form-group">
            <label for="fathorid" class="col-sm-2 control-label no-padding-right">所属栏目</label>
            <div class="col-sm-6">
                <select name="fathorid" style="width: 100%;">
            {volist name='$typemenu' id='list'  }
                {if condition="$list.typeid neq $fid"}<option  value="{$list.typeid}">{$list.typename}</option>
                   {else /}<option selected="selected" value="{$list.typeid}">{$list.typename}</option>
                {/if}
              {notempty name="list.children"}  
                            {volist name="list.children" id="child"}  
                                {if condition="$child.typeid neq $fid"}
                                <option value="{$child.typeid}">|————{$child.typename}</option>
                                   {else /}
                                   <option selected="selected" value="{$child.typeid}">|————{$child.typename}</option>
                                {/if}

                                {notempty name="child.children" id='sunzi'}  
                                    {if condition="$sunzi.typeid neq $fid"}
                                        <option  value="{$sunzi.typeid}">|————|————{$sunzi.typename}</option> 
                                   {else /}<option selected="selected" value="{$sunzi.typeid}">|————|————{$sunzi.typename}</option> 
                                {/if}

                                        
                                {/notempty}  
                            {/volist}  
                        {/notempty}
              {/volist}      
                </select>
            </div>
        </div> 
    {/switch}

这里主要视图部分

阅读剩余
THE END