where('delete_time', null) ->where('status', 1) ->field('id,cid,name,image,sort') ->find(); if (!$siteInfoCategory) { return json([ 'code' => 1, 'msg' => '未找到站点资讯分类' ]); } // 只返回其子分类,cid等于'站点资讯'的id $children = ArticlesCategory::where('cid', $siteInfoCategory['id']) ->where('delete_time', null) ->where('status', 1) ->field('id,cid,name,image,sort') ->select() ->toArray(); return json([ 'code' => 0, 'msg' => '获取站点资讯子分类成功', 'data' => $children ]); } // 获取siteinformation内容,传参 public function getSiteInformationLists() { try { // 获取前端传递的分类ID $cateid = input('cateid/d', 0); // 验证分类ID if ($cateid <= 0) { return json([ 'code' => 1, 'msg' => '分类ID不能为空' ]); } // 检查分类是否存在且有效 $category = ArticlesCategory::where('id', $cateid) ->where('delete_time', null) ->where('status', 1) ->find(); if (!$category) { return json([ 'code' => 1, 'msg' => '分类不存在或已禁用' ]); } // 获取分页参数 $page = input('page/d', 1); $limit = input('limit/d', 10); // 获取该分类下的所有子分类ID(包括自身) $subCategoryIds = [$cateid]; // 查找所有子分类 $subCategories = ArticlesCategory::where('cid', $cateid) ->where('delete_time', null) ->where('status', 1) ->column('id'); if (!empty($subCategories)) { $subCategoryIds = array_merge($subCategoryIds, $subCategories); } // 构建查询条件 $where = [ ['delete_time', '=', null], ['status', '=', 2], // 已发布的文章 ['cate', 'in', $subCategoryIds] ]; // 查询文章总数 $total = Articles::where($where)->count(); // 查询文章列表 $articles = Articles::where($where) ->field('id,title,cate,image,desc,author,content,publishdate,views,likes,is_trans,transurl,push,create_time') ->order('sort DESC, id DESC') ->page($page, $limit) ->select() ->toArray(); // 处理文章数据 foreach ($articles as &$article) { // 如果文章没有封面图,使用分类封面图 if (empty($article['image'])) { $article['image'] = $category['image'] ?? ''; } // 格式化时间 $article['publishdate'] = date('Y-m-d H:i:s', strtotime($article['publishdate'])); $article['create_time'] = date('Y-m-d H:i:s', strtotime($article['create_time'])); // 获取分类名称 $articleCategory = ArticlesCategory::where('id', $article['cate'])->find(); $article['category_name'] = $articleCategory ? $articleCategory['name'] : ''; } // 返回数据 return json([ 'code' => 0, 'msg' => '获取成功', 'data' => [ 'category' => [ 'id' => $category['id'], 'name' => $category['name'], 'desc' => $category['desc'], 'image' => $category['image'] ], 'articles' => $articles, 'total' => $total, 'page' => $page, 'limit' => $limit, 'total_pages' => ceil($total / $limit) ] ]); } catch (\Exception $e) { return json([ 'code' => 1, 'msg' => '获取失败:' . $e->getMessage() ]); } } //文章中心 public function index() { // 获取前端传来的分类ID $cateid = input('cateid/d', 0); // 使用input助手函数获取参数,并转换为整数 $page = input('page/d', 1); $limit = input('limit/d', 10); // 获取所有顶级分类 $categories = ArticlesCategory::where('cid', 0) ->where('delete_time', null) ->where('status', 1) ->select() ->toArray(); // 获取顶级分类信息 $category = null; if ($cateid > 0) { $category = ArticlesCategory::where('id', $cateid) ->where('delete_time', null) ->where('status', 1) ->find(); } // 获取所有子分类 $subCategories = []; if ($cateid > 0) { $subCategories = ArticlesCategory::where('cid', $cateid) ->where('delete_time', null) ->where('status', 1) ->select() ->toArray(); } // 获取所有子分类ID $subCategoryIds = array_column($subCategories, 'id'); if ($cateid > 0) { $subCategoryIds[] = $cateid; } // 构建文章查询条件 $where = [ ['delete_time', '=', null], ['status', '=', 2] ]; if (!empty($subCategoryIds)) { $where[] = ['cate', 'in', $subCategoryIds]; } // 查询文章 $articles = Articles::where($where) ->order('id DESC') ->page($page, $limit) ->select() ->toArray(); // 按子分类分组文章 $groupedArticles = []; foreach ($subCategories as $subCategory) { $groupedArticles[$subCategory['id']] = [ 'id' => $subCategory['id'], 'name' => $subCategory['name'], 'desc' => $subCategory['desc'], 'image' => $subCategory['image'], 'list' => [] ]; } // 将文章分配到对应的子分类 foreach ($articles as $article) { if (isset($groupedArticles[$article['cate']])) { // 如果文章图片为空,使用分类图片 if (empty($article['image'])) { $article['image'] = $groupedArticles[$article['cate']]['image']; } $groupedArticles[$article['cate']]['list'][] = $article; } } // 获取总数 $total = Articles::where($where)->count(); // 准备返回数据 $data = [ 'cate' => [ 'id' => $cateid, 'name' => $category ? $category['name'] : '', 'desc' => $category ? $category['desc'] : '', 'image' => $category ? $category['image'] : '', 'subCategories' => array_values($groupedArticles), 'total' => $total, 'page' => $page, 'limit' => $limit ] ]; // 根据请求方式返回不同的输出 if (request()->isPost()) { return json([ 'code' => 1, 'msg' => '获取成功', 'data' => $data ]); } else { // 为视图准备数据 $viewData = [ 'categories' => $categories, 'cate' => $data['cate'] ]; return view('index', $viewData); } } // 文章列表页 public function list() { // 获取分类ID $cateId = Request::param('cate/d', 0); // 构建查询条件 $where = [ ['a.delete_time', '=', null], ['a.status', '=', 2] ]; if ($cateId > 0) { $where[] = ['a.cate', '=', $cateId]; } // 获取文章列表 $articles = Articles::alias('a') ->join('articles_category c', 'a.cate = c.id') ->where($where) ->field([ 'a.*', 'IF(a.image IS NULL OR a.image = "", c.image, a.image) as image' ]) ->order('a.id DESC') ->paginate([ 'list_rows' => 10, 'query' => Request::instance()->param() ]); // 获取分类信息 $category = null; if ($cateId > 0) { $category = ArticlesCategory::where('id', $cateId) ->where('delete_time', null) ->where('status', 3) ->find(); } // 获取所有分类 $categories = ArticlesCategory::where('delete_time', null) ->where('status', 3) ->select() ->toArray(); // 根据请求方式返回不同的输出 if (request()->isPost()) { return json([ 'code' => 1, 'msg' => '获取成功', 'data' => [ 'articles' => $articles->items(), 'category' => $category, 'categories' => $categories, 'total' => $articles->total(), 'current_page' => $articles->currentPage(), 'per_page' => $articles->listRows() ] ]); } else { // 将变量传递给视图 View::assign([ 'articles' => $articles, 'category' => $category, 'categories' => $categories ]); return view('list'); } } // 文章详情页 public function detail() { $id = Request::param('id/d', 0); $article = Articles::where('id', $id)->find(); if (!$article) { return json(['code' => 0, 'msg' => '文章不存在或已被删除']); } // 获取分类名称 $cateName = ArticlesCategory::where('id', $article['cate']) ->value('name'); // 获取作者信息 $authorInfo = Users::where('name', $article['author'])->find(); if ($authorInfo) { // 统计作者的文章数 $articleCount = Articles::where('author', $article['author'])->count(); // 统计作者的资源数 $resourceCount = Resources::where('uploader', $article['author'])->count(); $authorData = [ 'avatar' => $authorInfo['avatar'] ?: '/static/images/avatar.png', 'name' => $authorInfo['name'], 'resource_count' => $resourceCount, 'article_count' => $articleCount ]; } else { $authorData = [ 'avatar' => '/static/images/avatar.png', 'name' => $article['author'], 'resource_count' => 0, 'article_count' => 0 ]; } // 获取上一篇和下一篇文章 $prevArticle = Articles::where('id', '<', $id) ->where('delete_time', null) ->where('status', '<>', 3) ->where('cate', $article['cate']) ->field(['id', 'title']) ->order('id DESC') ->find(); $nextArticle = Articles::where('id', '>', $id) ->where('delete_time', null) ->where('status', '<>', 3) ->where('cate', $article['cate']) ->field(['id', 'title']) ->order('id ASC') ->find(); // 获取相关文章(同分类的其他文章) $relatedArticles = Articles::alias('a') ->join('articles_category c', 'a.cate = c.id') ->where('a.cate', $article['cate']) ->where('a.id', '<>', $id) ->where('a.delete_time', null) ->where('a.status', '=', 2) ->field([ 'a.id', 'a.title', 'IF(a.image IS NULL OR a.image = "", c.image, a.image) as image' ]) ->order('a.id DESC') ->limit(3) ->select() ->toArray(); // 如果是 POST 请求,返回 JSON 数据 if (Request::isPost()) { return json([ 'code' => 1, 'msg' => '获取成功', 'data' => [ 'authorInfo' => $authorData, 'article' => $article, 'cateName' => $cateName, 'prevArticle' => $prevArticle, 'nextArticle' => $nextArticle, 'relatedArticles' => $relatedArticles ] ]); } // GET 请求返回视图 View::assign([ 'authorInfo' => $authorData, 'article' => $article, 'cateName' => $cateName, 'prevArticle' => $prevArticle, 'nextArticle' => $nextArticle, 'relatedArticles' => $relatedArticles ]); return view('detail'); } // 文章点赞 public function like() { if (!Request::isAjax()) { return json(['code' => 0, 'msg' => '非法请求']); } $id = Request::param('id/d', 0); // 检查文章是否存在 $article = Articles::where('id', $id) ->where('delete_time', null) ->where('status', 2) ->find(); if (!$article) { return json(['code' => 0, 'msg' => '文章不存在或已被删除']); } // 更新点赞数 $result = Articles::where('id', $id) ->where('delete_time', null) ->inc('likes', 1) ->update(); if ($result) { // 返回更新后的点赞数 $newLikes = $article['likes'] + 1; return json([ 'code' => 1, 'msg' => '点赞成功', 'data' => [ 'likes' => $newLikes ] ]); } else { return json(['code' => 0, 'msg' => '点赞失败']); } } // 提交评论 public function comment() { if (!Request::isAjax() || !Request::isPost()) { return json(['code' => 0, 'msg' => '非法请求']); } $articleId = Request::param('article_id/d', 0); $content = Request::param('content/s', ''); $parentId = Request::param('parent_id/d', 0); if (empty($content)) { return json(['code' => 0, 'msg' => '评论内容不能为空']); } // 检查文章是否存在 $article = Articles::where('id', $articleId) ->where('delete_time', null) ->where('status', 3) ->find(); if (!$article) { return json(['code' => 0, 'msg' => '文章不存在或已被删除']); } // 添加评论 // $data = [ // 'article_id' => $articleId, // 'content' => $content, // 'parent_id' => $parentId, // 'user_id' => $this->getUserId(), // 'user_name' => $this->getUserName(), // 'status' => 1, // 'create_time' => time() // ]; // $result = Db::table('yz_article_comment')->insert($data); // if ($result) { // return json(['code' => 1, 'msg' => '评论成功']); // } else { // return json(['code' => 0, 'msg' => '评论失败']); // } } // 获取当前用户ID(示例方法,实际应根据您的用户系统实现) private function getUserId() { // 这里应该返回当前登录用户的ID return 1; // 示例返回值 } // 获取当前用户名(示例方法,实际应根据您的用户系统实现) private function getUserName() { // 这里应该返回当前登录用户的用户名 return '游客'; // 示例返回值 } // 获取访问统计 public function viewStats() { $id = Request::param('id/d', 0); // 获取总访问量 $totalViews = Articles::where('id', $id) ->value('views'); return json([ 'code' => 1, 'data' => [ 'total' => $totalViews ] ]); } /** * 更新文章访问次数 */ public function updateViews() { if (!Request::isPost()) { return json(['code' => 0, 'msg' => '非法请求']); } $id = Request::post('id'); if (!$id) { return json(['code' => 0, 'msg' => '参数错误']); } try { // 更新访问次数 $article = Articles::where('id', $id)->find(); if (!$article) { return json(['code' => 0, 'msg' => '文章不存在']); } // 更新访问次数 Articles::where('id', $id)->inc('views')->update(); // 获取更新后的访问次数 $newViews = Articles::where('id', $id)->value('views'); return json(['code' => 1, 'msg' => '更新成功', 'data' => ['views' => $newViews]]); } catch (\Exception $e) { return json(['code' => 0, 'msg' => '更新失败:' . $e->getMessage()]); } } //获取作者信息 public function getAuthorInfo() { if (!Request::isPost()) { return json(['code' => 0, 'msg' => '非法请求']); } $authorName = Request::post('name'); if (empty($authorName)) { return json(['code' => 0, 'msg' => '作者名称不能为空']); } try { // 获取作者基本信息 $author = Db::name('users') ->where('name', $authorName) ->field('id, name, avatar') ->find(); if (!$author) { return json(['code' => 0, 'msg' => '作者不存在']); } // 获取作者发布的资源数量 $resourceCount = Db::name('resources') ->where('user_id', $author['id']) ->where('delete_time', null) ->where('status', 2) // 假设2是已发布状态 ->count(); // 获取作者发布的文章数量 $articleCount = Db::name('articles') ->where('author', $authorName) ->where('delete_time', null) ->where('status', 2) // 假设2是已发布状态 ->count(); return json([ 'code' => 1, 'msg' => '获取成功', 'data' => [ 'avatar' => $author['avatar'], 'name' => $author['name'], 'resource_count' => $resourceCount, 'article_count' => $articleCount ] ]); } catch (\Exception $e) { return json(['code' => 0, 'msg' => '获取作者信息失败:' . $e->getMessage()]); } } }