无限极分类的基础逻辑就不提了,直接从代码层开始
首先,创建数据库要绑定一个父级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>
好了,到这里一个简单的无限极分类就结束了,具体效果见下图
展示页面和添加页面