思路(直接看代码,数据表也会懂,都有注释 主要的就是添加的控制器方法):
1:判断是否为post传值,如果是get就展示表单页面,是post就用来添加数据,在修改数据的。
2:在添加数据的时候 ,可以在实例化时就添加数据,方法(tp5手册模块下的更新),这时添加完成,添加的是(自增id、父级id、名称)。
3:在找到新添加进去数据的id和父级id
4:判断父级id为0 时,进行数据修改更新(添加的是全路径和级别数,当pid为0是它的全路径就是它本身的id,级别数为0)
5:如果父级id不为0,那么我们就找到此父级id的所有数据(方法$data=实例化对象::find($pid)),并找他的父级路径(拼接,刚查询的数据里的全路径(就是$data['full_path'])和它本身的id进行拼接)拼接出新的全路径。并且拼接级别数(级别数+1 ,$data['class_num]+1).
6:拼接完,进行数据的修改更新。
数据先添加在添加更新(tp5手册 模块下的新增,更新、查询........等等里面都有详细的介绍)
建表
显示的表单页面
<div class="main-div">
<form action="{:url('cat/cat_add')}" method="post" name="theForm" enctype="multipart/form-data" onsubmit="return validate()">
<table width="100%" id="general-table">
<tbody>
<tr>
<td class="label">分类名称:</td>
<td><input type="text" name="name" maxlength="20" value="" size="27"> <font color="red">*</font></td>
</tr>
<tr>
<td class="label">上级分类:</td>
<td>
<select name="pid">
<option value="0">顶级分类</option>
{volist name="arr" id="v"}
<option value="{$v.cat_id}"><?php echo str_repeat('--|',$v['class_num']);?>{$v.name}</option>
{/volist}
</select>
</td>
</tr>
<tr>
<td class="label">是否显示:</td>
<td><input type="radio" name="is_show" value="1" checked="true"> 是<input type="radio" name="is_show" value="0"> 否 </td>
</tr>
</tbody></table>
<div class="button-div">
<input type="submit" value=" 确定 ">
<input type="reset" value=" 重置 ">
</div>
</form>
</div>
上面代码中用到的函数
PHP函数 str_repeat(‘要循环的值’,'循环的个数')
展示出来的效果
点击下拉框的展示
后台控制器的添加操作
public function cat_add()
{
if(Request::instance()->isGet())
{
$user=new Type();
//调用模块的查询数据的方法
$res=$user->sel();
return view('cat_add',['arr'=>$res]);
}
else
{
//接受更新的数据
$arr=input('post.');
$user=new Type($arr);
//添加数据
$user->save();
//获取添加进去数据的id
$cat_id=$user->cat_id;
//找到该出具的父级id
$pid=$arr['pid'];
//更新数据(修改数据)
if($pid==0)
{
//最高级别
$user->save([
'full_path' => $cat_id,
'class_num' => '0'
],['cat_id' => $cat_id]);
$this->success('添加成功');
}
else
{
//找到数据为其他的 那一条数据
$data=Type::find($pid);
//拼接全路径 此条数据的全路径和此数据的父级自增id拼接
$full_path=$data['full_path'].'-'.$cat_id;
//级别数
$class_num=$data['class_num']+1;
$user->save([
'full_path' => $full_path,
'class_num' =>$class_num,
],['cat_id' => $cat_id]);
$this->success('添加成功');
}
}
}
模块查询数据的方法
//分类管理的下来菜单
public function sel()
{
//其中的order可以不写
return $this->order('full_path','asc')->select();
}