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);
     //保存用户提交的数据,由于用户没有提交节点和层级,所以不会导致数据被破坏
 }
 /**
  * 物理删除,会重拍左右节点及层级。
  * @param type $id
  */
 public function delete($id)
 {
     $db_mysql_model = D('DbMysql');
     $nested_sets = new \Admin\Service\NestedSets($db_mysql_model, 'goods_category', 'lft', 'rght', 'parent_id', 'id', 'level');
     $nested_sets->delete($id);
 }