自定义分级菜单(可无限分级[推荐三级])

//添加页面 代码

结构图(0是一级分类,)

电脑配件的父类时[电脑],电脑的id是1

id 主键 cname 分类名称 pid 父级分类id path 分类路径 status 状态 
1 电脑 0 0 1
2 电脑配件 1 0,1 1
3 主板 2 0,1,2 1
4 服装 0 0 1
5 女装 4 0,4 1
6 衬衫 5 0,4,5 1
         
         
         
         
         
@extends('admin.common.common')
@section('content')

//form表单
<form action="/admin/citys/store" class="layui-form" method="post">
  {{ csrf_field() }}


  <div class="layui-form-item">
    <label class="layui-form-label">请输入</label>
    <div class="layui-input-block">
      <input type="text" name="cname" required autocomplete="off" placeholder="" class="layui-input">
    </div>
  </div>


  <div class="layui-form-item">
    <label class="layui-form-label">请选择</label>
    <div class="layui-input-block">
      <select name="pid"  required lay-filter="aihao">
        <option value="">--请选择--</option>
       @foreach($data as $k=>$v)
        <option value="{{ $v['id'] }}">{{ $v['cname'] }}</option>
       @endforeach 
        <option value="">添加一级分类</option>
      </select>
    </div>


  <div class="layui-form-item">
    <div class="layui-input-block">
      <button class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
      <button type="reset" class="layui-btn layui-btn-primary">重置</button>
    </div>
  </div>


</form>



@endsection('content')

@extends('admin.common.common')
@section('content')


<form action="/admin/citys/store" class="layui-form" method="post">
  {{ csrf_field() }}


  <div class="layui-form-item">
    <label class="layui-form-label">请输入</label>
    <div class="layui-input-block">
      <input type="text" name="cname" required autocomplete="off" placeholder="" class="layui-input">
    </div>
  </div>


  <div class="layui-form-item">
    <label class="layui-form-label">请选择</label>
    <div class="layui-input-block">
      <select name="pid"  required lay-filter="aihao">
        <option value="">--请选择--</option>
       @foreach($data as $k=>$v)
        <option value="{{ $v['id'] }}">{{ $v['cname'] }}</option>
       @endforeach 
        <option value="">添加一级分类</option>
      </select>
    </div>


  <div class="layui-form-item">
    <div class="layui-input-block">
      <button class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
      <button type="reset" class="layui-btn layui-btn-primary">重置</button>
    </div>
  </div>


</form>

 

@endsection('content')

//列表页面 代码

@extends('admin.common.common')
@section('content')
<div class="page-content">
      <!-- 中间层开始 -->
      <xblock><button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button></xblock>    
      <table class="layui-table">
          <thead>
              <tr>
                  <th><input type="checkbox" name="" value="" name="box[]"></th>
                  <th> ID </th>
                  <th> PID </th>
                  <th> 分类名称 </th>
                  <th> pid父级 </th>
                  <th> path路径 </th>
                  <th> 状态 </th>
          </thead>
          <tbody>
            @foreach($data as $v)
              <tr>
                  <td> <input type="checkbox" value="" name="box[]"></td>
                  <td> {{ $v['id'] }} </td>
                  <td> {{ $v['pid'] }} </td>
                  <td> {{ $v['cname'] }} </td>
                  <td>  pid父级  </td>
                  <td>{{ $v['path'] }}</td>
                  <td>{{ $v['status'] }}</td>
              </tr>
            @endforeach
          </tbody>
      </table>
      <div id="page">{!! $data->render()!!}</div>
      <!-- 中间层结束 -->
</div>

@endsection('content')

@extends('admin.common.common')
@section('content')
<div class="page-content">
      <!-- 中间层开始 -->
      <xblock><button class="layui-btn layui-btn-danger" onclick="delAll()"><i class="layui-icon"></i>批量删除</button></xblock>    
      <table class="layui-table">
          <thead>
              <tr>
                  <th><input type="checkbox" name="" value="" name="box[]"></th>
                  <th> ID </th>
                  <th> PID </th>
                  <th> 分类名称 </th>
                  <th> pid父级 </th>
                  <th> path路径 </th>
                  <th> 状态 </th>
          </thead>
          <tbody>
            @foreach($data as $v)
              <tr>
                  <td> <input type="checkbox" value="" name="box[]"></td>
                  <td> {{ $v['id'] }} </td>
                  <td> {{ $v['pid'] }} </td>
                  <td> {{ $v['cname'] }} </td>
                  <td>  pid父级  </td>
                  <td>{{ $v['path'] }}</td>
                  <td>{{ $v['status'] }}</td>
              </tr>
            @endforeach
          </tbody>
      </table>
      <div id="page">{!! $data->render()!!}</div>
      <!-- 中间层结束 -->
</div>

@endsection('content')

//控制器中代码

 /**
     *共用代码提出
     * 
     */
    public static function getCitys(){


    //方式一  $data = DB::select("select id,cname,pid,path,concat(path,',',id) as path from citys");
    //方式二
        $data = Citys::select('id','cname','pid','path','status',DB::raw("concat(path,',',id) as paths"))
                        ->orderBy('paths','asc')->paginate(10);


        //统计字符出现的次数
        foreach($data as $k => $v){
            $n = substr_count($v->path,',');
            $data[$k] -> cname = str_repeat('|-----',$n).$data[$k]->cname;
        }
        return $data;
    }

 /**
     *共用代码提出
     * 
     */
    public static function getCitys(){


        //方式一  $data = DB::select("select id,cname,pid,path,concat(path,',',id) as path from citys");
        //方式二
        $data = Citys::select('id','cname','pid','path','status',DB::raw("concat(path,',',id) as paths"))
                        ->orderBy('paths','asc')->paginate(10);


        //统计字符出现的次数
        foreach($data as $k => $v){
            $n = substr_count($v->path,',');
            $data[$k] -> cname = str_repeat('|-----',$n).$data[$k]->cname;
        }
        return $data;
    }

 

//显示列表
    /**
     * 显示列表
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //视图
       return view('admin.citys.index',['data'=>self::getCitys()]);
    }


    /**
     * 添加
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //视图
        return view('admin.citys.create',['data'=>self::getCitys()]);
    }


    /**
     * 保存
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $citys = new Citys;


        //检测顶级分类
        $pid = $request -> input('pid','');
        if($pid == 0){
            //顶级分类
            $citys -> path = '0';
        }else{
            //非顶级分类,查找父级
            $parent_data = Citys::find($pid);
            //(存储path字段) = (分级的path字段)拼上(分级的id字段)
            $citys -> path = $parent_data -> path.','.$parent_data ->id; 
        }


      
        $citys -> cname = $request -> input('cname','');
        $citys -> pid =$pid;


        //返回值
        if($citys ->save()){
            return redirect('/admin/citys') -> with('success','成功');
        }else{
            return back() -> with('error','失败');
        }
    }


//显示列表
    /**
     * 显示列表
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //视图
       return view('admin.citys.index',['data'=>self::getCitys()]);
    }


    /**
     * 添加
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //视图
        return view('admin.citys.create',['data'=>self::getCitys()]);
    }


    /**
     * 保存
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $citys = new Citys;


        //检测顶级分类
        $pid = $request -> input('pid','');
        if($pid == 0){
            //顶级分类
            $citys -> path = '0';
        }else{
            //非顶级分类,查找父级
            $parent_data = Citys::find($pid);
            //(存储path字段) = (分级的path字段)拼上(分级的id字段)
            $citys -> path = $parent_data -> path.','.$parent_data ->id; 
        }


      
        $citys -> cname = $request -> input('cname','');
        $citys -> pid =$pid;


        //返回值
        if($citys ->save()){
            return redirect('/admin/citys') -> with('success','成功');
        }else{
            return back() -> with('error','失败');
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_42632372/article/details/81006689