您的位置:首页 > 编程语言 > PHP开发

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

2017-07-16 11:59 337 查看
树状分类结构在修改分类时如果将本身链接在自己子分类下,就会将以这个分类为主的所有子分类丢失。



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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: