where('delete_time', null) ->where('status', 1) ->select() ->toArray(); // 获取顶级分类信息 $category = null; if ($cateid > 0) { $category = ResourcesCategory::where('id', $cateid) ->where('delete_time', null) ->where('status', 1) ->find(); } // 获取所有子分类 $subCategories = []; if ($cateid > 0) { $subCategories = ResourcesCategory::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', '=', 1] ]; if (!empty($subCategoryIds)) { $where[] = ['cate', 'in', $subCategoryIds]; } // 查询游戏 $games = Resources::where($where) ->order('id DESC') ->page($page, $limit) ->select() ->toArray(); // 按子分类分组游戏 $groupedGames = []; foreach ($subCategories as $subCategory) { $groupedGames[$subCategory['id']] = [ 'id' => $subCategory['id'], 'name' => $subCategory['name'], 'list' => [] ]; } // 将游戏分配到对应的子分类 foreach ($games as $game) { if (isset($groupedGames[$game['cate']])) { $groupedGames[$game['cate']]['list'][] = $game; } } // 获取总数 $total = Resources::where($where)->count(); // 准备返回数据 $data = [ 'cate' => [ 'id' => $cateid, 'name' => $category ? $category['name'] : '', 'desc' => $category ? $category['desc'] : '', 'image' => $category ? $category['image'] : '', 'subCategories' => array_values($groupedGames), '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', '=', 1] ]; if ($cateId > 0) { $where[] = ['a.cate', '=', $cateId]; } // 获取游戏列表 $games = Resources::alias('a') ->join('resources_category c', 'a.cate = c.id') ->where($where) ->field([ 'a.*', 'IF(a.icon IS NULL OR a.icon = "", c.icon, a.icon) as icon' ]) ->order('a.id DESC') ->paginate([ 'list_rows' => 10, 'query' => Request::instance()->param() ]); // 获取分类信息 $category = null; if ($cateId > 0) { $category = ResourcesCategory::where('id', $cateId) ->where('delete_time', null) ->where('status', 1) ->find(); } // 获取所有分类 $categories = ResourcesCategory::where('delete_time', null) ->where('status', 1) ->select() ->toArray(); // 如果是POST请求,返回JSON数据 if (Request::isPost()) { return json([ 'code' => 1, 'msg' => '获取成功', 'data' => [ 'games' => $games->items(), 'total' => $games->total(), 'current_page' => $games->currentPage(), 'per_page' => $games->listRows(), 'category' => $category ] ]); } // GET请求返回渲染的视图 View::assign([ 'games' => $games, 'category' => $category, 'categories' => $categories ]); return View::fetch('list'); } // 游戏详情页 public function detail() { $id = Request::param('id/d', 0); $game = Resources::where('id', $id)->find(); if (!$game) { return json(['code' => 0, 'msg' => '游戏不存在或已被删除']); } // 如果size没有,从附件表中获取 if (empty($game['size']) && !empty($game['fileurl'])) { $attachment = Attachments::where('src', $game['fileurl']) ->find(); if ($attachment && !empty($attachment['size'])) { $size = $attachment['size']; // 转换文件大小为合适的单位 if ($size >= 1073741824) { // 1GB = 1024MB = 1024*1024KB = 1024*1024*1024B $game['size'] = round($size / 1073741824, 2) . 'GB'; } elseif ($size >= 1048576) { // 1MB = 1024KB = 1024*1024B $game['size'] = round($size / 1048576, 2) . 'MB'; } else { $game['size'] = round($size / 1024, 2) . 'KB'; } } } // 获取分类名称 $cateName = ResourcesCategory::where('id', $game['cate']) ->value('name'); // 获取上一个和下一个游戏 $prevGame = Resources::where('id', '<', $id) ->where('delete_time', null) ->where('status', 1) ->order('id DESC') ->find(); $nextGame = Resources::where('id', '>', $id) ->where('delete_time', null) ->where('status', 1) ->order('id ASC') ->find(); // 获取相关游戏(同分类的其他游戏) $relatedGames = Db::table('yz_resources') ->alias('g') ->join('yz_resources_category c', 'g.cate = c.id') ->where('g.cate', $game['cate']) ->where('g.id', '<>', $id) ->where('g.delete_time', null) ->where('g.status', 1) ->field([ 'g.id', 'g.title', 'g.desc', 'IF(g.icon IS NULL OR g.icon = "", c.icon, g.icon) as icon' ]) ->order('g.id DESC') ->limit(3) ->select() ->toArray(); // 如果是 AJAX 请求,返回 JSON 数据 if (Request::isAjax()) { return json([ 'code' => 1, 'msg' => '获取成功', 'data' => [ 'game' => $game, 'cateName' => $cateName, 'prevGame' => $prevGame, 'nextGame' => $nextGame, 'relatedGames' => $relatedGames ] ]); } // 非 AJAX 请求返回视图 View::assign([ 'game' => $game, 'cateName' => $cateName, 'prevGame' => $prevGame, 'nextGame' => $nextGame, 'relatedGames' => $relatedGames ]); return View::fetch('detail'); } // 游戏下载 public function downloadurl() { if (!Request::isAjax()) { return json(['code' => 0, 'msg' => '非法请求']); } $id = Request::param('id/d', 0); // 获取游戏信息 $game = Resources::where('id', $id) ->where('delete_time', null) ->find(); if (!$game) { 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' => $game['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 { // 更新访问次数 $game = Resources::where('id', $id)->find(); if (!$game) { 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()]); } } }