Example #1
0
 public function updateMenu()
 {
     //编辑的时候先判断是否改变了父级菜单,如果改变了,才使用nestedsets
     $parent_id = $this->getFieldById($this->data['id'], 'parent_id');
     if ($parent_id != $this->data['parent_id']) {
         $db = D('DbMysql');
         $nested_sets = new \Admin\Service\NestedSets($db, 'menu', 'lft', 'rght', 'parent_id', 'id', 'level');
         $id = $nested_sets->moveUnder($this->data['id'], $this->data['parent_id'], 'bottom');
         if ($id === false) {
             $this->error = '菜单更新失败';
             return false;
         }
     }
     $request_data = $this->data;
     $this->save();
     //保存菜单和权限的映射关系
     $permissions = I('post.permission_ids');
     //先删除当前菜单对应的权限记录
     if (M('MenuPermission')->where(array('menu_id' => $request_data['id']))->delete() === false) {
         $this->error = '菜单权限关系重置失败';
         return false;
     }
     if ($this->permissionHandler($request_data['id'], $permissions) === false) {
         $this->error = '菜单权限关联失败';
         return false;
     }
     return true;
 }
 /**
  * 修改权限,如果不修改父级分类,不执行nestedSets的操作
  */
 public function savePermission()
 {
     //先获取到使用create处理过的数据,使用传值赋值
     $data = $this->data;
     //获取数据表中的数据
     $row = $this->find($this->data['id']);
     //如果当前父级分类和修改后的父级分类不一致,才需要计算左右节点
     if ($data['parent_id'] != $row['parent_id']) {
         $db = D('DbMysql');
         $nested_sets = new \Admin\Service\NestedSets($db, 'permission', 'lft', 'rght', 'parent_id', 'id', 'level');
         $nested_sets->moveUnder($this->data['id'], $data['parent_id'], 'bottom');
     }
     if (isset($data['status']) && $data['status'] == 0) {
         $data['name'] .= '_del';
     }
     $this->save($data);
     //保存用户提交的数据,由于用户没有提交节点和层级,所以不会导致数据被破坏
 }
 /**
  * 保存分类的修改。
  * 如果父级分类没有变化,使用nestedSets一定会返回false
  * 所以我们要区别对待,修改父级分类和不修改进行判断。
  * @return boolean
  */
 public function save()
 {
     /**
      * 此处不要使用find查询原来的数据,原因是,find会对当前对象的data属性进行修改,修改为数据库中的内容
      * 从而导致$this->create()收集到的数据被污染
      */
     $parent_id = $this->getFieldById($this->data['id'], 'parent_id');
     if ($parent_id != $this->data['parent_id']) {
         //>>1.执行sql的对象
         $db_mysql_model = new \Admin\Model\DbMysqlModel();
         //>>2.完成业务运算的对象
         $nested_sets = new \Admin\Service\NestedSets($db_mysql_model, 'goods_category', 'lft', 'rght', 'parent_id', 'id', 'level');
         $result = $nested_sets->moveUnder($this->data['id'], $this->data['parent_id'], 'bottom');
         if ($result === false) {
             $this->error = '移动失败!不能够移动到自己的子节点下!';
             return false;
         }
     }
     //>>4.更新其他表单字段中的数据
     return parent::save();
 }