$data) { $refer[$data[$pk]] = &$list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[$data[$pk]] = &$list[$key]; } else { if (isset($refer[$parentId])) { $parent = &$refer[$parentId]; $parent[$child][$data[$pk]] = &$list[$key]; } } } } return $tree; } function create_tree_list($pid, $arr, $group, &$tree = []){ foreach ( $arr as $key => $vo ){ if($key == 0){ $vo['spread'] = true; } if (!empty($group) and in_array($vo['id'], $group)) { $vo['checked'] = true; } else{ $vo['checked'] = false; } if( $vo['pid'] == $pid ){ $child= create_tree_list( $vo['id'] ,$arr,$group); if( $child ){ $vo['children'] = $child; } $tree[] = $vo; } } return $tree; } //递归排序 function set_recursion($result, $pid = 0, $format = "L ") { /*记录排序后的类别数组*/ static $list = array(); foreach ($result as $k => $v) { if ($v['pid'] == $pid) { if ($pid != 0) { $v['title'] = $format . $v['title']; } /*将该类别的数据放入list中*/ $list[] = $v; set_recursion($result, $v['id'], " " . $format); } } return $list; } //获取指定管理员的信息 function get_admin($id) { $admin = \think\facade\Db::name('admin')->where(['id' => $id])->find(); $admin['group_id'] = \think\facade\Db::name('admin_group_access')->where(['uid' => $id])->column('group_id'); return $admin; } //读取后台菜单列表 function get_admin_menu() { $menu = \think\facade\Db::name('admin_menu')->order('order asc')->select()->toArray(); return $menu; } //读取权限节点列表 function get_admin_rule() { $rule = \think\facade\Db::name('admin_rule')->order('create_time asc')->select()->toArray(); return $rule; } //读取权限分组列表 function get_admin_group() { $group = \think\facade\Db::name('admin_group')->order('create_time asc')->select()->toArray(); return $group; } //读取指定权限分组详情 function get_admin_group_info($id) { $group = \think\facade\Db::name('admin_group')->where(['id' => $id])->find(); $group['rules'] = explode(',', $group['rules']); $group['menus'] = explode(',', $group['menus']); return $group; } //菜单父子关系排序,用于后台菜单 function get_admin_menus() { if (get_cache('menu' . get_login_admin('id'))) { $list = get_cache('menu' . get_login_admin('id')); } else { $adminGroup = \think\facade\Db::name('admin_group_access')->where(['uid' => get_login_admin('id')])->column('group_id'); $adminMenu = \think\facade\Db::name('admin_group')->where('id', 'in', $adminGroup)->column('menus'); $adminMenus = []; foreach ($adminMenu as $k => $v) { $v = explode(',', $v); $adminMenus = array_merge($adminMenus, $v); } $menu = \think\facade\Db::name('admin_menu')->where('id', 'in', $adminMenus)->order('order asc')->select()->toArray(); $list = list_to_tree($menu); \think\facade\Cache::tag('adminMenu')->set('menu' . get_login_admin('id'), $list); } return $list; } //读取导航列表,用于后台 function get_nav($nav_id) { $nav = \think\facade\Db::name('NavInfo')->where('nav_id', $nav_id)->order('order asc')->select(); return $nav; } //读取关键字列表 function get_keywords() { $keywords = \think\facade\Db::name('keywords')->where(['status' => 1])->order('create_time asc')->select(); return $keywords; } //读取文章分类列表 function get_article_cate() { $cate = \think\facade\Db::name('article_cate')->order('create_time asc')->select()->toArray(); return $cate; } //读取指定分类下的文章列表 function get_article($cate_id = "") { $where = array(); if (!empty($cate_id)) { $where['article_cate_id'] = $cate_id; } $article = \think\facade\Db::name('article')->where($where)->order('create_time desc')->paginate( get_config(app . page_size))->toArray(); return $article; } //读取指定文章的详情 function get_article_info($id) { $article = \think\facade\Db::name('article')->where(['id' => $id])->find(); if (empty($article)) { return $this->error('文章不存在'); } $keywrod_array = \think\facade\Db::name('ArticleKeywords') ->field('i.aid,i.keywords_id,k.title') ->alias('i') ->join('keywords k', 'k.id = i.keywords_id', 'LEFT') ->order('i.create_time asc') ->where(array('i.aid' => $id, 'k.status' => 1)) ->select()->toArray(); $article['keyword_ids'] = implode(",", array_column($keywrod_array, 'keywords_id')); $article['keyword_names'] = implode(',', array_column($keywrod_array, 'title')); return $article; } /** * 管理员操作日志 * @param string $type 操作类型 login add edit view delete * @param int $param_id 操作类型 * @param array $param 提交的参数 */ function add_log($type, $param_id = '', $param = []) { $request = get_params(); switch ($type) { case 'login': $title = '登录'; break; case 'upload': $title = '上传'; break; case 'add': $title = '新增'; break; case 'edit': $title = '编辑'; break; case 'view': $title = '查看'; break; case 'delete': $title = '删除'; break; default: $title = '未知'; break; } if ($type == 'login') { $login_admin = \think\facade\Db::name('admin')->where(array('id' => $param_id))->find(); } else { $session_admin = get_config('app.session_admin'); $login_admin = \think\facade\Session::get($session_admin); } $content = $login_admin['nickname'] . '在' . date('Y-m-d H:i:s') . '执行了' . $title . '操作'; $data = []; $data['uid'] = $login_admin['id']; $data['nickname'] = $login_admin['nickname']; $data['type'] = $type; $data['title'] = $title; $data['content'] = $content; $data['param_id'] = $param_id; $data['param'] = json_encode($param); $data['module'] = \think\facade\App::initialize()->http->getName(); $data['controller'] = app('request')->controller(); $data['function'] = app('request')->action(); $data['ip'] = app('request')->ip(); $data['create_time'] = time(); $parameter = $data['controller'] . '/' . $data['function']; $data['rule_menu'] = $parameter; $data['admin_menu'] = \think\facade\Db::name('admin_rule')->where(array('title' => $parameter))->value('title') ?? $title; \think\facade\Db::name('admin_log')->strict(false)->field(true)->insert($data); }