/**
  * 根据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;
 }
Exemple #2
0
/**
 * 获取所有数据并转换成一维数组
 * @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();
    }
Exemple #13
0
/**
 * 获取所有数据并转换成一维数组
 * @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');
     }
 }