php实现修改分类级别时防止将原分类加在自己子分类下

树状分类结构在修改分类时如果将本身链接在自己子分类下,就会将以这个分类为主的所有子分类丢失。



解决出现这种状况的方式为:

1、将本分类下的所有子分类和本身做成一个集合

2、在修改提交时,对修改后的上级分类与1中的集合对比,如何1中集合存在这个修改后的上级分类。便返回错误信息。反之,成功修改

Model中获得子分类id的代码:

//定义一个方法,获取指定节点的id
	public function getSubIds($pid){
		$sql = "select * from {$this->table}";
		$cats = $this->db->getAll($sql);
		$cats = $this->tree($cats, $pid);

	//	$cats = $this->getCats();
		$list = array();
		foreach ($cats as $cat) {
			$list[] = $cat['cat_id'];
		}
		return $list;
	}

controller中更新的方法:

//更新分类信息动作
	public function updateAction(){
		//1.收集表单数据
		$data['cat_name'] = trim($_POST['cat_name']);
		$data['parent_id'] = $_POST['parent_id'];
		$data['unit'] = trim($_POST['unit']);
		$data['sort_order'] = trim($_POST['sort_order']);
		$data['is_show'] = trim($_POST['is_show']);
		$data['cat_desc'] = trim($_POST['cat_desc']);
		$data['cat_id'] = $_POST['cat_id'];

		//2.验证及处理
		if($data['cat_name'] === ""){
			$this->jump("index.php?p=admin&c=category&a=add", "分类不能为空", 3);
		}

		//不能将当前节点及妻子节点作为上级节点
		$categoryModel = new CategoryModel("category");
		//获取当前节点的子孙节点
		$ids = $categoryModel->getSubIds($data['cat_id']);
		//将当前节点id合并进去
		$ids[] = $data['cat_id'];
		if(in_array($data['parent_id'], $ids)){
			$this->jump('index.php?p=admin&c=category&a=edit&cat_id='.$data['cat_id'], "不能将当前节点及妻子节点作为上级节点", 3);
		}
		/*var_dump($ids);
		exit;*/

		//3.调用模型完成更新操作
		if($categoryModel->update($data)){
			$this->jump("index.php?p=admin&c=category&a=index", "更新分类成功", 2);
		} else {
			$this->jump("index.php?p=admin&c=category&a=edit&cat_id=" . $data['cat_id'], "更新分类失败", 3);
		}
		
	}
jump是自己写的跳转到消息页面的方法:三个参数分别为:url,message,time

如果选择子分类后的显示界面:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值