全路径(下拉框的展示和数据的添加更新)先添加后修改

本文介绍了使用ThinkPHP5框架实现分类管理的具体步骤,包括如何处理GET和POST请求、添加和更新分类数据、构建分类全路径及级别数等关键操作。

思路(直接看代码,数据表也会懂,都有注释  主要的就是添加的控制器方法):

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();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值