where('status', 1) ->order('sort', 'asc') ->select(); // 获取每个顶级分类下的子分类 $categories = []; foreach ($parentCategories as $parent) { $subCategories = ResourcesCategory::where('cid', $parent->id) ->where('status', 1) ->order('sort', 'asc') ->select(); // 获取每个子分类下的资源数量 foreach ($subCategories as &$subCategory) { $subCategory['resource_count'] = Resources::where('cate', $subCategory->id) ->where('status', 1) ->count(); } $categories[] = [ 'parent' => $parent, 'subCategories' => $subCategories ]; } // 将数据传递给视图 View::assign('categories', $categories); return View::fetch(); } // 资源列表页 public function list() { $cid = input('cid/d', 0); $page = input('page/d', 1); // 获取分类信息 $category = ResourcesCategory::where('id', $cid) ->where('status', 1) ->find(); if (!$category) { $this->error('分类不存在'); } // 获取该分类下的资源,带分页 $resources = Resources::where('cate', $cid) ->where('status', 1) ->order('sort', 'asc') ->paginate([ 'list_rows' => 20, 'page' => $page, 'query' => Request::instance()->param() ]); // 将数据传递给视图 View::assign('category', $category); View::assign('data', $resources); View::assign('page', $resources->render()); // 新增这一行 return View::fetch('list'); } // 资源详情页 public function detail() { $id = Request::param('id/d', 0); $resources = Resources::where('id', $id)->find(); if (!$resources) { return json(['code' => 0, 'msg' => '资源不存在或已被删除']); } // 如果size没有,从附件表中获取 if (empty($resources['size']) && !empty($resources['fileurl'])) { $attachment = Attachments::where('src', $resources['fileurl']) ->find(); if ($attachment && !empty($attachment['size'])) { $size = $attachment['size']; // 转换文件大小为合适的单位 if ($size >= 1073741824) { // 1GB = 1024MB = 1024*1024KB = 1024*1024*1024B $resources['size'] = round($size / 1073741824, 2) . 'GB'; } elseif ($size >= 1048576) { // 1MB = 1024KB = 1024*1024B $resources['size'] = round($size / 1048576, 2) . 'MB'; } else { $resources['size'] = round($size / 1024, 2) . 'KB'; } } } // 获取分类名称 $cateName = ResourcesCategory::where('id', $resources['cate']) ->value('name'); // 获取作者信息 $authorInfo = Users::where('name', $resources['uploader'])->find(); // var_dump($authorInfo); if ($authorInfo) { // 统计作者的文章数 $resourcesCount = Articles::where('author', $resources['uploader'])->count(); // 统计作者的资源数 $resourceCount = Resources::where('uploader', $resources['uploader'])->count(); $authorData = [ 'avatar' => $authorInfo['avatar'] ?: '/static/images/avatar.png', 'name' => $authorInfo['name'], 'resource_count' => $resourceCount, 'article_count' => $resourcesCount ]; } else { $authorData = [ 'avatar' => '/static/images/avatar.png', 'name' => $resources['author'], 'resource_count' => 0, 'article_count' => 0 ]; } // 获取上一个和下一个资源 $prevResources = Resources::where('id', '<', $id) ->where('delete_time', null) ->where('status', 1) ->where('cate', $resources['cate']) ->field(['id', 'title']) ->order('id DESC') ->find(); $nextResources = Resources::where('id', '>', $id) ->where('delete_time', null) ->where('status', 1) ->where('cate', $resources['cate']) ->field(['id', 'title']) ->order('id ASC') ->find(); // 获取相关资源(同分类的其他资源) $relatedResourcess = Db::table('yz_resources') ->alias('g') ->join('yz_resources_category c', 'g.cate = c.id') ->where('g.cate', $resources['cate']) ->where('g.id', '<>', $id) ->where('g.delete_time', null) ->where('g.status', 1) ->field([ 'g.id', 'g.title', 'IF(g.icon IS NULL OR g.icon = "", c.icon, g.icon) as icon' ]) ->order('g.id DESC') ->limit(5) ->select() ->toArray(); // 如果是 AJAX 请求,返回 JSON 数据 if (Request::isAjax()) { return json([ 'code' => 1, 'msg' => '获取成功', 'data' => [ 'resources' => $resources, 'cateName' => $cateName, 'prevResources' => $prevResources, 'nextResources' => $nextResources, 'relatedResourcess' => $relatedResourcess ] ]); } // 非 AJAX 请求返回视图 View::assign([ 'resources' => $resources, 'cateName' => $cateName, 'authorInfo' => $authorData, 'prevResources' => $prevResources, 'nextResources' => $nextResources, 'relatedResourcess' => $relatedResourcess ]); return View::fetch('detail'); } // 资源下载 public function downloadurl() { if (!Request::isAjax()) { return json(['code' => 0, 'msg' => '非法请求']); } $id = Request::param('id/d', 0); // 获取资源信息 $resources = Resources::where('id', $id) ->where('delete_time', null) ->find(); if (!$resources) { return json(['code' => 0, 'msg' => '资源不存在']); } // 更新下载次数 $result = Resources::where('id', $id) ->where('delete_time', null) ->inc('downloads', 1) ->update(); if ($result) { return json([ 'code' => 1, 'msg' => '下载成功', 'data' => [ 'url' => $resources['url'] ] ]); } else { return json(['code' => 0, 'msg' => '下载失败']); } } // 获取访问统计 public function viewStats() { $id = Request::param('id/d', 0); // 获取总访问量 $totalViews = Resources::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 { // 更新访问次数 $resources = Resources::where('id', $id)->find(); if (!$resources) { return json(['code' => 0, 'msg' => '资源不存在']); } // 更新访问次数 Resources::where('id', $id)->inc('views')->update(); // 获取更新后的访问次数 $newViews = Resources::where('id', $id)->value('views'); return json(['code' => 1, 'msg' => '更新成功', 'data' => ['views' => $newViews]]); } catch (\Exception $e) { return json(['code' => 0, 'msg' => '更新失败:' . $e->getMessage()]); } } }