php实现修改分类级别时防止将原分类加在自己子分类下
2017-07-16 11:59
337 查看
树状分类结构在修改分类时如果将本身链接在自己子分类下,就会将以这个分类为主的所有子分类丢失。
![](http://img.blog.csdn.net/20170716115215463?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGFuY2hlbmcx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
解决出现这种状况的方式为:
1、将本分类下的所有子分类和本身做成一个集合
2、在修改提交时,对修改后的上级分类与1中的集合对比,如何1中集合存在这个修改后的上级分类。便返回错误信息。反之,成功修改
Model中获得子分类id的代码:
controller中更新的方法:
如果选择子分类后的显示界面:
解决出现这种状况的方式为:
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
如果选择子分类后的显示界面:
相关文章推荐
- php 用递归实现的无限级别分类
- php 无线级别分类 实现评论回复功能
- PHP不用递归实现无限分类数据的树形格式化 5行9行代码修改
- php 用递归实现的无限级别分类
- php无限级别分类的实现
- php实现递归与无限分类的方法
- PHP中CURL应用与基于的修改Google实现
- PHP实现无限分类
- php实现简单的用户注册,登录,修改个人信息接口
- [php] [Thinkphp]递归处理将分类按级别输出
- 实现无限分类(php版)
- php 实现修改 ldap 账号密码
- PHP实现的登录,注册及密码修改功能分析
- 为了防止采集,把文章中出现的URL链接随机大小写(PHP实现)
- 自己修改的动力无限分类修改代码
- Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
- php 修改、增加xml结点属性的实现代码
- 修改Zend引擎实现PHP源码加密的原理及实践
- 防止模拟键盘一类工具操作自己的系统的“简单实现”
- SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)