无限极分类的具体实现

无限极分类的基础逻辑就不提了,直接从代码层开始

首先,创建数据库要绑定一个父级id(pid)

1,数据库创完之后,就是业务层了,框架使用的是laravel5.7

model层

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

//定义一个model层,实现业务的逻辑层代码
class district extends Model {

    //提供一个展示页面的方法(方便代码的理解)
    public static function index()
    {
        $info=DB::table('district')->get();
        //使用self来调用无限极分类的方法,并实现绑定,
        //传入参数 $info:数据库查询的全部数据
        // $pid:定义的一个父级id,与下面list_level()方法里无限极分类里调用的父级pid相互关联
        // $level:定义一个等于0的变量,赋予下面无限极分类初始值
        $result=self::list_level($info,$pid=0,$level=0);
        return $result;
    }

    //提供一个无限极分类的方法
    public static function list_level($data,$pid,$level)//三个参数与上面index方法里面穿的参数相对应
    {
        //电柜一个静态变量,存储一个空数组,用静态变量,是因为静态变量不会被销毁,
        //会保存之前保留的值,普通变量在函数结束时,会死亡,生命周期函数开始到函数结束,再次调用重新开始生长
        //保存一个空数组
        static $array=[];
        foreach($data as $k=>$v){
            //进行判断如果pid=0,那么为顶级父类,放入定义的空数组里
            if($pid==$v->pid){
                //添加空格进行分层
                $v->level=$level;
                $array[]=$v;
                //递归点,调用自身,把顶级父类的主键id作为父类进行再调用循环,空格+1
                self::list_level($data,$v->id,$level+1);
            }
        }
        return $array;
    }

    //提供一个添加的方法
    public static function add($data)
    {
        $info=DB::table('district')->insert($data);
        return $info;
    }

}

Controller层

<?php
namespace App\Http\Controllers;

use App\District;
use Illuminate\Http\Request;

class DistrictController extends Controller{

    //调用model层,实现前台展示
    public function index()
    {
        $data=District::index();
        return view('district',['data'=>$data]);
    }

    //展示前台添加页面,并把model层接受到的数据出入前台
    public function add()
    {
        $data=District::index();
        return view('district_add',['data'=>$data]);
    }

    //调用model,实现添加功能
    public function addsave(Request $request)
    {
        $result=$request->only('pid','name');
        $info=District::add($result);
        if($info){
            return redirect('index');
        }else{
            return redirect('add');
        }
    }


}

试图展示页面

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<a href="add">添加</a>
<table border="1" cellpadding="10" cellspacing="0">
    <tr>
        <th>id</th>
        <th>name</th>
        <th>pid</th>
    </tr>
    @foreach($data as $v)
        <tr>
            <td>{{$v->id}}</td>
            <td>{{str_repeat('|-',$v->level)}}{{$v->name}}</td>
            <td>{{$v->pid}}</td>
        </tr>
    @endforeach
</table>
</body>
</html>

视图添加页面

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<form action="{{url('addsave')}}" method="post">
    {{csrf_field()}}
    <table>
        <tr>
            <td>选择地区</td>
            <td>
                <select name="pid">
                    <option value="0">顶级分类</option>
                    @foreach($data as $v)
                        <option value="{{$v->id}}">{{str_repeat('—|',$v->level)}}{{$v->name}}</option>
                    @endforeach
                </select>
            </td>
        </tr>
        <tr>
            <td>分类名称</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td><input type="submit" value="添加"></td>
        </tr>
    </table>
</form>
</body>
</html>

好了,到这里一个简单的无限极分类就结束了,具体效果见下图

展示页面和添加页面

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值