/** * 根据id获取当前菜单的顶级菜单 * @author jry <*****@*****.**> */ public function getRootMenuById($id) { if (empty($id)) { return false; } switch (MODULE_NAME) { case 'Admin': //系统菜单 $map['id'] = array('eq', $id); $map['status'] = array('eq', 1); $main_menu = array(); do { $main_menu = $this->where($map)->find(); $map['id'] = array('eq', $main_menu['pid']); } while ($main_menu['pid'] > 0); break; default: //模块菜单 $map = array('id' => $id); $main_menu = array(); $tree = new \Common\Util\Tree(); $current_module_admin_menu = json_decode(D('SystemModule')->getFieldByName(MODULE_NAME, 'admin_menu'), true); do { $main_menu = $tree->list_search($current_module_admin_menu, $map); $main_menu = $main_menu[0]; $map = array('id' => $main_menu['pid']); } while ($main_menu !== null && $main_menu['pid'] != '0'); break; } return $main_menu; }
/** * 获取所有数据并转换成一维数组 * @author jry <*****@*****.**> */ function select_list_as_tree($model, $map = null, $extra = null, $key = 'id') { //获取列表 $con['status'] = array('eq', 1); if ($map) { $con = array_merge($con, $map); } $model_object = D($model); if (in_array('sort', $model_object->getDbFields())) { $list = $model_object->where($con)->order('sort asc, id asc')->select(); } else { $list = $model_object->where($con)->order('id asc')->select(); } //转换成树状列表(非严格模式) $tree = new \Common\Util\Tree(); $list = $tree->toFormatTree($list, 'title', 'id', 'pid', 0, false); if ($extra) { $result[0] = $extra; } //转换成一维数组 foreach ($list as $val) { $result[$val[$key]] = $val['title_show']; } return $result; }
/** * 分类列表 * @author jry <*****@*****.**> */ public function index($tab = 1) { //搜索 $keyword = (string) I('keyword'); $condition = array('like', '%' . $keyword . '%'); $map['id|title'] = array($condition, $condition, '_multi' => true); //获取所有分类 $map['status'] = array('egt', '0'); //禁用和正常状态 if (I('get.pid')) { $map['pid'] = array('eq', I('get.pid')); //父分类ID } $map['group'] = array('eq', $tab); $data_list = D('Category')->field('id,pid,group,doc_type,title,url,icon,ctime,sort,status')->where($map)->order('sort asc,id asc')->select(); foreach ($data_list as &$item) { if ($item['doc_type'] >= 3) { $item['title'] = '<a href="' . U('Document/index', array('cid' => $item['id'])) . '">' . $item['title'] . '</a>'; } } //转换成树状列表 $tree = new \Common\Util\Tree(); $data_list = $tree->toFormatTree($data_list); $attr['title'] = '编辑'; $attr['href'] = 'Admin/Category/edit/tab/' . $tab . '/id/'; //使用Builder快速建立列表页面。 $builder = new \Common\Builder\ListBuilder(); $builder->title('分类列表')->AddNewButton('Admin/Category/add/tab/' . $tab)->addResumeButton()->addForbidButton()->setSearch('请输入ID/分类名称', U('Admin/Category/index/tab/' . $tab))->SetTablist(C('CATEGORY_GROUP_LIST'))->SetCurrentTab($tab)->addField('id', 'ID', 'text')->addField('title_show', '分类', 'text')->addField('url', '链接', 'text')->addField('icon', '图标', 'icon')->addField('sort', '排序', 'text')->addField('status', '状态', 'status')->addField('right_button', '操作', 'btn')->dataList($data_list)->addRightButton('self', $attr)->addRightButton('forbid')->addRightButton('delete')->display(); }
/** * 获取菜单 */ protected function getMenus() { //获取系统菜单导航 $map['status'] = array('gt', 0); $SystemMenuModel = D('SystemMenu'); $tree = new \Common\Util\Tree(); $all_admin_menu_list = $tree->list_to_tree($SystemMenuModel->where($map)->select()); //所有系统菜单 //设置数组key为菜单ID foreach ($all_admin_menu_list as $key => $val) { $all_menu_list[$val['id']] = $val; } //获取功能模块的后台菜单列表 $moule_list = D('StoreModule')->where($map)->select(); //获取所有安装并启用的功能模块 $all_module_menu_list = array(); foreach ($moule_list as $key => $val) { $menu_list_item = $tree->list_to_tree(json_decode($val['admin_menu'], true)); $all_module_menu_list[] = $menu_list_item[0]; } //设置数组key为菜单ID foreach ($all_module_menu_list as &$menu) { $new_all_module_menu_list[$menu['id']] = $menu; } //合并系统核心菜单与功能模块菜单 if ($new_all_module_menu_list) { $all_menu_list += $new_all_module_menu_list; } $current_menu = $SystemMenuModel->getCurrentMenu(); //当前菜单 $parent_menu = $SystemMenuModel->getParentMenu($current_menu['id']); //获取面包屑导航 foreach ($parent_menu as $key => $val) { $parent_menu_id[] = $val['id']; } $current_root_menu = $SystemMenuModel->getRootMenuById($current_menu['id']); //当前菜单的顶级菜单 $side_menu_list = $all_menu_list[$current_root_menu['id']]['_child']; //左侧菜单 $this->assign('__ALL_MENU_LIST__', $all_menu_list); //所有菜单 $this->assign('__SIDE_MENU_LIST__', $side_menu_list); //左侧菜单 $this->assign('__PARENT_MENU__', $parent_menu); //当前菜单的所有父级菜单 $this->assign('__PARENT_MENU_ID__', $parent_menu_id); //当前菜单的所有父级菜单的ID $this->assign('__CURRENT_ROOTMENU__', $current_root_menu['id']); //当前主菜单 $this->assign('__USER__', session('user_auth')); //用户登录信息 }
/** * 菜单列表 */ public function index() { //搜索 $keyword = (string) I('keyword'); $condition = array('like', '%' . $keyword . '%'); $map['id|title'] = array($condition, $condition, '_multi' => true); //搜索条件 //获取所有菜单 $map['status'] = array('egt', 0); //禁用和正常状态 $data_list = D('SystemMenu')->where($map)->order('sort asc, id asc')->select(); //转换成树状列表 $tree = new \Common\Util\Tree(); $data_list = $tree->toFormatTree($data_list); //使用Builder快速建立列表页面。 $builder = new \Common\Builder\ListBuilder(); $builder->title('菜单列表')->AddNewButton()->addResumeButton()->addForbidButton()->addDeleteButton()->setSearch('请输入ID/菜单名称', U('index'))->addField('id', 'ID', 'text')->addField('title_show', '标题', 'text')->addField('url', '链接', 'text')->addField('icon', '图标', 'icon')->addField('sort', '排序', 'text')->addField('status', '状态', 'status')->addField('right_button', '操作', 'btn')->dataList($data_list)->addRightButton('edit')->addRightButton('forbid')->addRightButton('delete')->display(); }
/** * 分类列表 * @author jry <*****@*****.**> */ public function index($group = 1) { // 搜索 $keyword = I('keyword', '', 'string'); $condition = array('like', '%' . $keyword . '%'); $map['id|title'] = array($condition, $condition, '_multi' => true); // 获取所有分类 $map['status'] = array('egt', '0'); // 禁用和正常状态 if (I('get.pid')) { $map['pid'] = array('eq', I('get.pid')); // 父分类ID } $map['group'] = array('eq', $group); $data_list = D('Category')->field('id,pid,group,doc_type,title,url,icon,create_time,sort,status')->where($map)->order('sort asc,id asc')->select(); // 非系统特殊类型则给标题加上链接以便于进入相应文档列表 foreach ($data_list as &$item) { $document_type = D('Type')->find($item['doc_type']); // 获取当前文档类型 if ($document_type['system'] === '0') { $item['title'] = '<a href="' . U('Article/Admin/Article/index', array('cid' => $item['id'])) . '">' . $item['title'] . '</a>'; } } // 转换成树状列表 $tree = new \Common\Util\Tree(); $data_list = $tree->toFormatTree($data_list); // 设置Tab导航数据列表 $category_group_list = D('Category')->group_list(); // 获取分类分组 foreach ($category_group_list as $key => $val) { $tab_list[$key]['title'] = $val; $tab_list[$key]['href'] = U('index', array('group' => $key)); } $attr['title'] = '编辑'; $attr['class'] = 'label label-primary'; $attr['href'] = U('edit', array('group' => $group, 'id' => '__data_id__')); // 使用Builder快速建立列表页面。 $builder = new \Common\Builder\ListBuilder(); $builder->setMetaTitle('分类列表')->addTopButton('addnew', array('href' => U('add', array('group' => $group))))->addTopButton('resume', array('model' => $this->model))->addTopButton('forbid', array('model' => $this->model))->setSearch('请输入ID/分类名称', U('index', array('group' => $group)))->setTabNav($tab_list, $group)->addTableColumn('id', 'ID')->addTableColumn('title_show', '分类')->addTableColumn('url', '链接')->addTableColumn('icon', '图标', 'icon')->addTableColumn('sort', '排序')->addTableColumn('status', '状态', 'status')->addTableColumn('right_button', '操作', 'btn')->setTableDataList($data_list)->addRightButton('self', $attr)->addRightButton('hide', array('model' => $this->model))->addRightButton('forbid', array('model' => $this->model))->addRightButton('delete', array('model' => $this->model))->display(); }
/** * 分类列表 * @author jry <*****@*****.**> */ public function index($group = 1) { //搜索 $keyword = (string) I('keyword'); $condition = array('like', '%' . $keyword . '%'); $map['id|title'] = array($condition, $condition, '_multi' => true); //获取所有分类 $map['status'] = array('egt', '0'); //禁用和正常状态 if (I('get.pid')) { $map['pid'] = array('eq', I('get.pid')); //父分类ID } $map['group'] = array('eq', $group); $data_list = D('Category')->field('id,pid,group,doc_type,title,url,icon,ctime,sort,status')->where($map)->order('sort asc,id asc')->select(); foreach ($data_list as &$item) { if ($item['doc_type'] >= 3) { $item['title'] = '<a href="' . U('Document/index', array('cid' => $item['id'])) . '">' . $item['title'] . '</a>'; } } //转换成树状列表 $tree = new \Common\Util\Tree(); $data_list = $tree->toFormatTree($data_list); //设置Tab导航数据列表 $category_group_list = C('CATEGORY_GROUP_LIST'); //获取分类分组 foreach ($category_group_list as $key => $val) { $tab_list[$key]['title'] = $val; $tab_list[$key]['href'] = U('index', array('group' => $key)); } $attr['title'] = '编辑'; $attr['class'] = 'label label-info'; $attr['href'] = U('Admin/Category/edit/group/' . $group . '/id/[__data_id__]'); //使用Builder快速建立列表页面。 $builder = new \Common\Builder\ListBuilder(); $builder->setMetaTitle('分类列表')->addTopButton('addnew', array('href' => U('Admin/Category/add/group/' . $group)))->addTopButton('resume')->addTopButton('forbid')->setSearch('请输入ID/分类名称', U('Admin/Category/index/group/' . $group))->setTabNav($tab_list, $group)->addTableColumn('id', 'ID')->addTableColumn('title_show', '分类')->addTableColumn('url', '链接')->addTableColumn('icon', '图标', 'icon')->addTableColumn('sort', '排序')->addTableColumn('status', '状态', 'status')->addTableColumn('right_button', '操作', 'btn')->setTableDataList($data_list)->addRightButton('self', $attr)->addRightButton('forbid')->addRightButton('delete')->display(); }
/** * 获取分类树,指定分类则返回指定分类的子分类树,不指定则返回所有分类树,指定分类若无子分类则返回同级分类 * @param integer $id 分类ID * @param boolean $field 查询字段 * @return array 分类树 * @author jry <*****@*****.**> */ public function getCategoryTree($id = 0, $limit = null, $page = 1, $group = 1, $field = true) { //获取当前分类信息 if ((int) $id > 0) { $info = $this->find($id); $id = $info['id']; } //获取所有分类 $map['status'] = array('eq', 1); $map['group'] = array('eq', $id ? $info['group'] : $group); $tree = new \Common\Util\Tree(); $list = $this->field($field)->where($map)->order('sort asc, id asc')->select(); // 拼接分类地址 foreach ($list as $key => &$val) { $val['href'] = U($this->moduleName . '/Index/lists', array('cid' => $val['id'])); } // 转换成树结构 $list = $tree->list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = (int) $id); //返回当前分类的子分类树 if ($limit) { $list = array_slice($list, 0, $limit); } if (!$list) { return $this->getSameLevelCategoryTree($id); } return $list; }
/** * 获取所有数据并转换成一维数组 * @author jry <*****@*****.**> */ public function selectListAsTree($model, $map = null, $extra = null) { //获取列表 $map['status'] = array('eq', 1); $list = D($model)->where($map)->select(); //转换成树状列表 $tree = new \Common\Util\Tree(); $list = $tree->toFormatTree($list); if ($extra) { $result[0] = $extra; } //转换成一维数组 foreach ($list as $val) { $result[$val['id']] = $val['title_show']; } return $result; }
/** * 默认方法 * @author jry <*****@*****.**> */ public function index($cid) { //分类权限检测 if (!D('UserGroup')->checkCategoryAuth($cid)) { $this->error('权限不足!'); } //获取分类信息 $category_info = D('Category')->find($cid); //获取该分类绑定文档模型的主要字段 $document_type_object = D('DocumentType'); $document_type = $document_type_object->find($category_info['doc_type']); $document_type_main_field = D('DocumentAttribute')->getFieldById($document_type['main_field'], 'name'); //获取分类绑定模型定义的列表需要显示的字段 $doc_type_list_field = explode(',', $document_type['list_field']); //获取文档字段 $map = array(); $map['status'] = array('eq', '1'); $map['show'] = array('eq', '1'); $map['id'] = array('in', $doc_type_list_field); //只获取列表定义的字段 $map['doc_type'] = array('eq', $category_info['doc_type']); $attribute_list = D('DocumentAttribute')->where($map)->select(); $attribute_list_search = D('DocumentAttribute')->where($map)->getField('name', true); //获取文档信息 $map = array(); $map['cid'] = $cid; $map['status'] = array('egt', 0); //搜索条件这里用了TP的复合查询 //封装了一个新的查询条件$map_field,然后并入原来的查询条件$map之中,所以可以完成比较复杂的查询条件组装 $keyword = I('keyword', '', 'string'); if ($attribute_list_search && $keyword) { foreach ($attribute_list_search as $attribute) { $map_field[$attribute] = array('like', '%' . $keyword . '%'); //搜索条件 } $map_field['_logic'] = 'or'; $map['_complex'] = $map_field; } //获取文档列表 $document_list = D('Document')->getDocumentList($cid, C('ADMIN_PAGE_ROWS'), null, $map); $document_table = C('DB_PREFIX') . 'document_' . strtolower($document_type['name']); //分页 $page = new \Common\Util\Page(D('Document')->where($map)->join($document_table . ' ON __DOCUMENT__.id = ' . $document_table . '.id')->count(), C('ADMIN_PAGE_ROWS')); //移动按钮属性 $move_attr['title'] = '移 动'; $move_attr['class'] = 'btn btn-info'; $move_attr['onclick'] = 'move()'; //构造移动文档所需内容 $map = array(); $map['status'] = array('eq', 1); $map['doc_type'] = array('eq', $category_info['doc_type']); //文档类型相同的分类才能移动 $category_list = D('Category')->where($map)->select(); $tree = new \Common\Util\Tree(); $category_list = $tree->toFormatTree($category_list); //构造移动文档的目标分类列表 $options = ''; foreach ($category_list as $key => $val) { $options .= '<option value="' . $val['id'] . '">' . $val['title_show'] . '</option>'; } //文档移动POST地址 $move_url = U('Admin/Document/move'); $extra_html = <<<EOF <div class="modal fade" id="moveModal"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">关闭</span></button> <p class="modal-title">移动至</p> </div> <div class="modal-body"> <form action="{$move_url}" method="post" class="form"> <div class="form-group"> <select name="to_cid" class="form-control">{$options}</select> </div> <div class="form-group"> <input type="hidden" name="ids"> <input type="hidden" name="from_cid" value="{$cid}"> <button class="btn btn-primary btn-block submit ajax-post" type="submit" target-form="form">确 定</button> </div> </form> </div> </div> </div> </div> <script type="text/javascript"> function move(){ var ids = ''; \$('input[name="ids[]"]:checked').each(function(){ ids += ',' + \$(this).val(); }); if(ids != ''){ ids = ids.substr(1); \$('input[name="ids"]').val(ids); \$('.modal-title').html('移动选中的的文章至:'); \$('#moveModal').modal('show', 'fit') }else{ \$.alertMessager('请选择需要移动的文章', 'danger'); } } </script> EOF; //使用Builder快速建立列表页面。 $builder = new \Common\Builder\ListBuilder(); $builder->setMetaTitle($category_info['title'])->addTopButton('self', array('title' => '<i class="fa fa-reply"></i> 返回分类', 'class' => 'btn btn-warning', 'onclick' => 'javascript:history.back(-1);return false;'))->addTopButton('addnew', array('href' => U('add', array('cid' => $cid))))->addTopButton('resume')->addTopButton('forbid')->addTopButton('recycle')->addTopButton('self', $move_attr)->setSearch('请输入ID/标题', U('index', array('cid' => $cid)))->addTableColumn('id', 'ID'); //动态生成列表显示的字段 foreach ($attribute_list as $attribute) { $builder->addTableColumn($attribute['name'], $attribute['title'], $attribute['type']); } //继续使用Builder快速建立列表页面 $builder->addTableColumn('ctime', '发布时间', 'time')->addTableColumn('sort', '排序', 'text')->addTableColumn('status', '状态', 'status')->addTableColumn('right_button', '操作', 'btn')->setTableDataList($document_list)->setTableDataPage($page->show())->addRightButton('edit')->addRightButton('forbid')->addRightButton('recycle')->setExtraHtml($extra_html)->display(); }
/** * 根据菜单ID的获取其所有父级菜单 * @param int $cid 菜单id * @return array 父级菜单集合 * @author jry <*****@*****.**> */ public function getParentMenu($id) { if (empty($id)) { return false; } switch (MODULE_NAME) { case 'Admin': //系统菜单 $map['status'] = array('eq', 1); $menus = $this->where($map)->select(); $child = $this->field('id,pid,title,url')->find($id); //获取信息 $pid = $child['pid']; $temp = array(); $res[] = $child; while (true) { foreach ($menus as $key => $val) { if ($val['id'] == $pid) { $pid = $val['pid']; array_unshift($res, $val); //将父菜单插入到数组第一个元素前 } } if ($pid == '0') { break; } } break; default: //模块菜单 $menus = json_decode(D('SystemModule')->getFieldByName(MODULE_NAME, 'admin_menu'), true); $tree = new \Common\Util\Tree(); $map = array('url' => strtolower(MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME)); $child = $tree->list_search($menus, $map); $child = $child[0]; //获取信息 $pid = $child['pid']; $temp = array(); $res[] = $child; while (true) { foreach ($menus as $key => $val) { if ($val['id'] == $pid) { $pid = $val['pid']; array_unshift($res, $val); //将父菜单插入到数组第一个元素前 } } if ($pid == '0') { break; } } break; } return $res; }
/** * 默认方法 * @author jry <*****@*****.**> */ public function index($cid = null) { //搜索 $keyword = (string) I('keyword'); $condition = array('like', '%' . $keyword . '%'); $map['id|title'] = array($condition, $condition, '_multi' => true); if ($cid) { $map['cid'] = $cid; $category = D('Category')->find($cid); } $map['status'] = array('egt', 0); $document_list = D('Document')->page(!empty($_GET["p"]) ? $_GET["p"] : 1, C('ADMIN_PAGE_ROWS'))->order('sort desc,id desc')->where($map)->select(); $page = new \Common\Util\Page(D('Document')->where($map)->count(), C('ADMIN_PAGE_ROWS')); //新增按钮属性 $add_attr['class'] = 'btn btn-primary'; $add_attr['href'] = U('add', array('cid' => $cid)); //移动按钮属性 $move_attr['class'] = 'btn btn-info'; $move_attr['onclick'] = 'move()'; //构造移动文档所需内容 $map = array(); $map['status'] = array('eq', 1); $map['doc_type'] = array('eq', $category['doc_type']); //文档类型相同的分类才能移动 $category_list = D('Category')->where($map)->select(); $tree = new \Common\Util\Tree(); $category_list = $tree->toFormatTree($category_list); //构造移动文档的目标分类列表 $options = ''; foreach ($category_list as $key => $val) { $options .= '<option value="' . $val['id'] . '">' . $val['title_show'] . '</option>'; } $extra_html = <<<EOF <div class="modal fade" id="moveModal"> <div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">关闭</span></button> <p class="modal-title">移动至</p> </div> <div class="modal-body"> <form action="{:U('Document/move')}" method="post" class="form"> <div class="form-group"> <select name="to_cid" class="form-control">{$options}</select> </div> <div class="form-group"> <input type="hidden" name="ids"> <input type="hidden" name="from_cid" value="{$cid}"> <button class="btn btn-primary btn-block submit ajax-post" type="submit" target-form="form">确 定</button> </div> </form> </div> </div> </div> </div> <script type="text/javascript"> function move(){ var ids = ''; \$('input[name="ids[]"]:checked').each(function(){ ids += ',' + \$(this).val(); }); if(ids != ''){ ids = ids.substr(1); \$('input[name="ids"]').val(ids); \$('.modal-title').html('移动选中的的文章至:'); \$('#moveModal').modal('show', 'fit') }else{ alertMessager('请选择需要移动的文章', 'danger'); } } </script> EOF; //使用Builder快速建立列表页面。 $builder = new \Common\Builder\ListBuilder(); $builder->title($category['title'])->addButton('新 增', $add_attr)->addResumeButton()->addForbidButton()->addRecycleButton()->AddButton('移 动', $move_attr)->setSearch('请输入ID/标题', U('index'))->addField('id', 'ID', 'text')->addField('title', '标题', 'text')->addField('ctime', '发布时间', 'time')->addField('sort', '排序', 'text')->addField('status', '状态', 'status')->addField('right_button', '操作', 'btn')->dataList($document_list)->addRightButton('edit')->addRightButton('forbid')->addRightButton('recycle')->setPage($page->show())->setExtraHtml($extra_html)->display(); }
/** * 获取所有数据并转换成一维数组 * @author jry <*****@*****.**> */ function select_list_as_tree($model, $map = null, $extra = null) { //获取列表 $con['status'] = array('eq', 1); if ($map) { $con = array_merge($con, $map); } $list = D($model)->where($con)->select(); //转换成树状列表(非严格模式) $tree = new \Common\Util\Tree(); $list = $tree->toFormatTree($list, 'title', 'id', 'pid', 0, false); if ($extra) { $result[0] = $extra; } //转换成一维数组 foreach ($list as $val) { $result[$val['id']] = $val['title_show']; } return $result; }
/** * 获取分类树,指定分类则返回指定分类的子分类树,不指定则返回所有分类树,指定分类若无子分类则返回同级分类 * @param integer $id 分类ID * @param boolean $field 查询字段 * @return array 分类树 * @author jry <*****@*****.**> */ public function getCategoryTree($id = 0, $group = 1, $field = true) { //获取当前分类信息 if ((int) $id > 0) { $info = $this->find($id); $id = $info['id']; } //获取所有分类 $map['status'] = array('eq', 1); $map['group'] = array('eq', $id ? $info['group'] : $group); $tree = new \Common\Util\Tree(); $list = $this->field($field)->where($map)->order('sort asc')->select(); $list = $this->getCategoryCount($list); //获取分类的文档数目 $list = $tree->list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = (int) $id); //返回当前分类的子分类树 if (!$list) { return $this->getSameLevelCategoryTree($id); } return $list; }
/** * 初始化方法 * @author jry <*****@*****.**> */ protected function _initialize() { //登录检测 if (!is_login()) { //还没登录跳转到登录页面 $this->redirect('Admin/Public/login'); } //权限检测 if (!D('UserGroup')->checkMenuAuth()) { $this->error('权限不足!'); } //获取系统菜单导航 $map['status'] = array('eq', 1); if (!C('DEVELOP_MODE')) { //是否开启开发者模式 $map['dev'] = array('neq', 1); } $tree = new \Common\Util\Tree(); $all_admin_menu_list = $tree->list_to_tree(D('SystemMenu')->where($map)->select()); //所有系统菜单 //设置数组key为菜单ID foreach ($all_admin_menu_list as $key => $val) { $all_menu_list[$val['id']] = $val; } //获取功能模块的后台菜单列表 $moule_list = D('SystemModule')->where(array('status' => 1))->select(); //获取所有安装并启用的功能模块 $all_module_menu_list = array(); foreach ($moule_list as $key => $val) { $menu_list_item = $tree->list_to_tree(json_decode($val['admin_menu'], true)); $all_module_menu_list[] = $menu_list_item[0]; } //设置数组key为菜单ID foreach ($all_module_menu_list as &$menu) { $new_all_module_menu_list[$menu['id']] = $menu; } //合并系统核心菜单与功能模块菜单 if ($new_all_module_menu_list) { $all_menu_list += $new_all_module_menu_list; } $current_menu = D('SystemMenu')->getCurrentMenu(); //当前菜单 if ($current_menu) { $parent_menu = D('SystemMenu')->getParentMenu($current_menu); //获取面包屑导航 foreach ($parent_menu as $key => $val) { $parent_menu_id[] = $val['id']; } $side_menu_list = $all_menu_list[$parent_menu[0]['id']]['_child']; //左侧菜单 } $this->assign('__ALL_MENU_LIST__', $all_menu_list); //所有菜单 $this->assign('__SIDE_MENU_LIST__', $side_menu_list); //左侧菜单 $this->assign('__PARENT_MENU__', $parent_menu); //当前菜单的所有父级菜单 $this->assign('__PARENT_MENU_ID__', $parent_menu_id); //当前菜单的所有父级菜单的ID $this->assign('__CURRENT_ROOTMENU__', $parent_menu[0]['id']); //当前主菜单 $this->assign('__USER__', session('user_auth')); //用户登录信息 $this->assign('__CONTROLLER_NAME__', strtolower(CONTROLLER_NAME)); //当前控制器名称 $this->assign('__ACTION_NAME__', strtolower(ACTION_NAME)); //当前方法名称 }
/** * 编辑部门 * @author jry <*****@*****.**> */ public function edit($id) { if (IS_POST) { $user_group_object = D('UserGroup'); $_POST['menu_auth'] = implode(',', I('post.menu_auth')); $_POST['category_auth'] = implode(',', I('post.category_auth')); $data = $user_group_object->create(); if ($data) { if ($user_group_object->save() !== false) { $this->success('更新成功', U('index')); } else { $this->error('更新失败'); } } else { $this->error($user_group_object->getError()); } } else { //获取部门信息 $info = D('UserGroup')->find($id); $info['menu_auth'] = explode(',', $info['menu_auth']); $info['category_auth'] = explode(',', $info['category_auth']); //获取现有部门 $map['status'] = array('egt', 0); $tree = new \Common\Util\Tree(); $all_group = $tree->toFormatTree(D('UserGroup')->where($map)->order('sort asc,id asc')->select()); $all_group = array_merge(array(0 => array('id' => 0, 'title_show' => '顶级部门')), $all_group); //获取栏目分类权限节点(系统权限节点直接使用AdminController里的__ALL_MENU_LIST__) $category_auth_list = array(); $category_group_list = C('CATEGORY_GROUP_LIST'); foreach ($category_group_list as $key => $val) { //获取当前分组下的分类 $map['status'] = array('egt', 1); $map['group'] = array('eq', $key); $category_list = $tree->toFormatTree(D('Category')->where($map)->select()); //构造权限列表 $category_auth_list[$key]['title'] = $val; $category_auth_list[$key]['auth'] = $category_list; } $this->assign('all_group', $all_group); $this->assign('category_auth_list', $category_auth_list); $this->assign('info', $info); $this->assign('meta_title', '编辑部门'); $this->display('add_edit'); } }
/** * 获取分类树,指定分类则返回指定分类的子分类树,不指定则返回所有分类树,指定分类若无子分类则返回同级分类 * @param integer $id 分类ID * @param boolean $field 查询字段 * @return array 分类树 * @author jry <*****@*****.**> */ public function getCategoryTree($id = 0, $limit = null, $group = 1, $field = 'id,pid,title,icon,create_time,sort') { //获取当前分类信息 if ((int) $id > 0) { $info = $this->find($id); $id = $info['id']; } //获取所有分类 $map['status'] = array('eq', 1); $map['group'] = array('eq', $id ? $info['group'] : $group); $tree = new \Common\Util\Tree(); $list = $this->field($field)->where($map)->order('sort asc, id asc')->select(); $list = $tree->list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = (int) $id); //返回当前分类的子分类树 if ($limit) { $list = array_slice($list, 0, $limit); } if (!$list) { return $this->getSameLevelCategoryTree($id); } return $list; }
/** * 编辑部门 * @author jry <*****@*****.**> */ public function edit($id) { if (IS_POST) { $user_group_object = D('UserGroup'); $_POST['auth'] = implode(',', I('post.auth')); $data = $user_group_object->create(); if ($data) { if ($user_group_object->save() !== false) { $this->success('更新成功', U('index')); } else { $this->error('更新失败'); } } else { $this->error($user_group_object->getError()); } } else { $info = D('UserGroup')->find($id); $info['auth'] = explode(',', $info['auth']); $map['status'] = array('egt', 0); $tree = new \Common\Util\Tree(); $all_group = $tree->toFormatTree(D('UserGroup')->where($map)->order('sort asc,id asc')->select()); $all_group = array_merge(array(0 => array('id' => 0, 'title_show' => '顶级部门')), $all_group); $this->assign('all_group', $all_group); $this->assign('info', $info); $this->meta_title = '编辑部门'; $this->display('add_edit'); } }