Game.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. <?php
  2. /**
  3. * 前端游戏控制器
  4. * Created by PhpStorm.
  5. * User: Administrator
  6. * Date: 2019/9/29
  7. * Time: 14:11
  8. */
  9. namespace app\home\controller;
  10. use app\common\model\GameHome as GameModel;
  11. use app\common\model\News as NewsModel;
  12. use think\Db;
  13. use think\Exception;
  14. use think\Config;
  15. class Game extends Home
  16. {
  17. // 开测类型 1-预告 2-开服 3-删档内测 4-不删档内测 5-公测
  18. private $_serstatus = [
  19. '1' => '预告',
  20. '2' => '开服',
  21. '3' => '删档内测',
  22. '4' => '不删档内测',
  23. '5' => '公测',
  24. ];
  25. /**
  26. * 找游戏
  27. */
  28. public function index() {
  29. $gameModel = new GameModel;
  30. $where = [];
  31. if(input('type')){
  32. $where['game.type'] = intval(input('type'));
  33. }
  34. if(input('subject')){
  35. $where['game.subject'] = intval(input('subject'));
  36. }
  37. //获取游戏分类列表
  38. $gameTypeList = Db::connect(config('database_slave'))->table('cy_gametype')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->select();
  39. //游戏题材表
  40. $gameSubjectList = Db::connect(config('database_slave'))->table('cy_gamesubject')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->select();
  41. //查询参数
  42. $param = input('get.');
  43. $list = $gameModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  44. ->alias('game')
  45. ->join('cy_gameinfo info', 'game.id = info.game_id','left')
  46. ->join('cy_sdkgamelist sdk', 'game.id=sdk.gameid and sdk.package_type=0 and sdk.upload_status=1 and sdk.channel_id='.MEMBER_DEFAULT_CHANNEL_ID,'left')
  47. ->field('game.id,game.nickname,game.power,info.androidurl,info.platform,game.pinyin,info.mobileicon,game.type,game.subject,sdk.filename')
  48. ->where(['game.cooperation_status' => ['in','1,2'],'game.is_show' => 1])
  49. ->where($where)
  50. ->order('game.create_time desc')
  51. ->paginate(25, false, array('query' => $param))
  52. ->each(function ($item, $key){
  53. $item['icon'] = STATIC_DOMAIN.$item['mobileicon'];
  54. $item['size'] = getSize($item);
  55. $item['download'] = getDownload($item);
  56. $item['url'] = getGameUrl($item['id']);
  57. return $item;
  58. });
  59. //游戏分类一维数组
  60. $gameType = arrayColumnByObject($gameTypeList,'name','id');
  61. //游戏题材一维数组
  62. $gameSubject = arrayColumnByObject($gameSubjectList,'name','id');
  63. //文章内页广告推荐
  64. $adList = Db::connect(config('database_slave'))->table('cy_ad')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->field('id,title,url,image')->where(['type'=>8])->order('sort asc,create_time asc')->limit(0,2)->select();
  65. // var_dump($adList);
  66. //顶部推荐
  67. $topBannerList = Db::connect(config('database_slave'))->table('cy_ad')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->field('id,title,url,image')->where(['type'=>1])->order('sort asc,create_time asc')->limit(0,5)->select();
  68. foreach ($topBannerList as &$ad) {
  69. $ad['url'] = preg_match("/^http(s)?:\\/\\/.+/",$ad['url']) ? $ad['url'] : 'http://' . $ad['url'];
  70. }
  71. $this->assign('gameTypeList',$gameTypeList);
  72. $this->assign('gameSubjectList',$gameSubjectList);
  73. $this->assign('gameType',$gameType);
  74. $this->assign('gameSubject',$gameSubject);
  75. $this->assign('topBannerList',$topBannerList);
  76. $this->assign('adList',$adList);
  77. $this->assign('list',$list);
  78. $this->assign('page', $list->render());
  79. $title = '手机游戏_祈盟文化';
  80. if(intval(input('type')) || intval(input('subject'))){
  81. if(intval(input('type')) && intval(input('subject'))){
  82. $title = $gameSubject[intval(input('subject'))].'_'.$gameType[intval(input('type'))].$title;
  83. }
  84. else if(intval(input('type'))){
  85. $title = $gameType[intval(input('type'))].$title;
  86. }
  87. else if(intval(input('subject'))){
  88. $title = $gameSubject[intval(input('subject'))].$title;
  89. }
  90. }
  91. $seo['title'] = $title;
  92. $seo['keywords'] = '找手机游戏,手机游戏大全,手机游戏排行榜,好玩的手机游戏';
  93. $seo['description'] = '祈盟文化找游戏频道免费为玩家提供最新最好玩的手机游戏下载,同时也提供最热门的手机游戏排行榜和各种手机游戏分类筛选服务。';
  94. $this->assign('seo',$seo);
  95. return $this->fetch();
  96. }
  97. public function detail() {
  98. $gameModel = new GameModel;
  99. $gameid = intval(input('id'));
  100. $type = trim(input('type'));
  101. if(in_array($type,['index','news','gift','kfkc'])){
  102. if($type=='index'){
  103. return $this->info();
  104. }
  105. else if($type=='news'){
  106. return $this->news();
  107. }
  108. else if($type=='gift'){
  109. return $this->gift();
  110. }
  111. else{
  112. return $this->server();
  113. }
  114. }
  115. else{
  116. return $this->info();
  117. }
  118. }
  119. public function info() {
  120. $gameModel = new GameModel;
  121. $gameid = intval(input('id'));
  122. if(!$gameid) {
  123. // throw new Exception("游戏不存在");
  124. $this->_abort404();
  125. }
  126. $this->gameDetail('info');
  127. return $this->fetch();
  128. }
  129. private function news() {
  130. $gameModel = new GameModel;
  131. $gameid = intval(input('id'));
  132. if(!$gameid) {
  133. // throw new Exception("游戏不存在");
  134. $this->_abort404();
  135. }
  136. $this->gameDetail('news');
  137. $newsModel = new NewsModel;
  138. $list = $newsModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  139. ->alias('a')
  140. ->join('cy_content b', 'a.id = b.id','left')
  141. ->field('a.id,a.title,a.image,a.jlink,a.create_time,a.total,a.zhiding,a.type,a.gameid,b.content')
  142. ->where(['a.gameid'=>$gameid,'a.isdelete' => 0,'a.type'=>['in','1,2,3,4,5']])
  143. ->order('a.create_time DESC')
  144. ->paginate(10, false)
  145. ->each(function ($item, $key){
  146. $item['image'] = STATIC_DOMAIN.$item['image'];
  147. $item['url'] = getNewsUrl($item['id'],$item['jlink']);
  148. $item['createdate'] = date('Y-m-d',$item['create_time']);
  149. $item['createtime'] = date('H:i:s',$item['create_time']);
  150. $item['cutcontent'] = getCutcontent($item['content']);
  151. return $item;
  152. });
  153. $this->assign('list',$list);
  154. $this->assign('page', $list->render());
  155. return $this->fetch('info-news');
  156. }
  157. private function gift() {
  158. $gameModel = new GameModel;
  159. $gameid = intval(input('id'));
  160. if(!$gameid) {
  161. // throw new Exception("游戏不存在");
  162. $this->_abort404();
  163. }
  164. $this->gameDetail('gift');
  165. $where = [
  166. 'a.gameid' => $gameid,
  167. 'a.isdelete' => 0,
  168. 'a.endtime' => ['gt',NOW_TIMESTAMP],
  169. 'b.is_show' => 1,
  170. 'b.cooperation_status' => ['in',[0,1,2]]
  171. ];
  172. $list = Db::connect(config('database_slave'))->table('cy_libaoinfo')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->alias('a')
  173. ->join('cy_game b','a.gameid = b.id')
  174. ->join('cy_gameinfo info', 'b.id=info.game_id', 'left')
  175. ->field('a.id,a.gameid,a.title,a.content,a.total,a.used,a.starttime,a.endtime,info.mobileicon')
  176. ->where($where)
  177. ->where('a.total > a.used')
  178. ->order('a.create_time DESC')
  179. ->paginate(10, false)
  180. ->each(function ($item, $key){
  181. $used = $item['used'];
  182. $total = $item['total'];
  183. $item['percent'] = '100%';
  184. if ( $used >= $total ) {
  185. $item['percent'] = '0%';
  186. } else if ( $used && $total ) {
  187. $item['percent'] = (bcsub( 1, bcdiv($used, $total, 2), 2 ) * 100) . '%';
  188. }
  189. $item['mobileicon'] = STATIC_DOMAIN.$item['mobileicon'];
  190. $item['starttime'] = date('Y-m-d H:i',$item['starttime']);
  191. $item['endtime'] = date('Y-m-d H:i',$item['endtime']);
  192. return $item;
  193. });
  194. $this->assign('list',$list);
  195. $this->assign('page', $list->render());
  196. return $this->fetch('info-gift');
  197. }
  198. private function server() {
  199. $gameModel = new GameModel;
  200. $gameid = intval(input('id'));
  201. if(!$gameid) {
  202. // throw new Exception("游戏不存在");
  203. $this->_abort404();
  204. }
  205. $this->gameDetail('server');
  206. $kcServers = $this->getGameServer($gameid,1);
  207. // var_dump($kcServers);
  208. $kfServers = $this->getGameServer($gameid,0);
  209. // var_dump($kfServers);
  210. $this->assign('kcServers',$kcServers['list']);
  211. $this->assign('kcPage',$kcServers['page']);
  212. $this->assign('kfServers',$kfServers['list']);
  213. $this->assign('kfPage',$kfServers['page']);
  214. return $this->fetch('info-server');
  215. }
  216. private function gameDetail($p_type='info') {
  217. $gameModel = new GameModel;
  218. $gameid = intval(input('id'));
  219. if(!$gameid) {
  220. // throw new Exception("游戏不存在");
  221. $this->_abort404();
  222. }
  223. $detail = $gameModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  224. ->alias('game')
  225. ->join('cy_gameinfo info', 'game.id = info.game_id','left')
  226. ->join('cy_gametype t', 'game.type = t.id','left')
  227. ->join('cy_gamesubject s', 'game.subject = s.id','left')
  228. ->join('cy_sdkgamelist sdk', 'game.id=sdk.gameid and sdk.package_type=0 and sdk.upload_status=1 and sdk.channel_id='.MEMBER_DEFAULT_CHANNEL_ID,'left')
  229. ->field('game.id,game.nickname,game.power,info.androidurl,info.platform,game.pinyin,info.mobileicon,game.type,game.subject,info.developer,info.bigimage,t.name as typename,s.name as subjectname,info.description,sdk.filename')
  230. ->where(['game.id'=>$gameid,'game.cooperation_status' => ['in','0,1,2'],'game.is_show' => 1])
  231. ->find();
  232. // var_dump($detail);
  233. if ( empty($detail)) {
  234. // throw new Exception("游戏不存在或无效");
  235. $this->_abort404();
  236. }
  237. else{
  238. $detail['icon'] = STATIC_DOMAIN.$detail['mobileicon'];
  239. $detail['size'] = getSize($detail);
  240. $detail['version'] = getVersion($detail);
  241. $detail['updatetime'] = getUpdateTime($detail);
  242. $detail['download'] = getDownload($detail);
  243. $detail['screenShot'] = getScreenShot($detail['bigimage']);
  244. $detail['typename'] = getTypename($detail['typename']);
  245. $detail['subjectname'] = getSubjectname($detail['subjectname']);
  246. $detail['developer'] = getDeveloper($detail['developer']);
  247. }
  248. // var_dump($detail);
  249. //获取最新上线游戏列表
  250. $newGameList = $gameModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  251. ->alias('game')
  252. ->join('cy_gameinfo info', 'game.id = info.game_id')
  253. ->join('cy_gametype t', 'game.type = t.id','left')
  254. ->join('cy_gamesubject s', 'game.subject = s.id','left')
  255. ->field('game.id,game.nickname,game.power,info.androidurl,info.platform,game.pinyin,info.mobileicon,game.type,game.subject,t.name as typename,s.name as subjectname')
  256. ->where(['game.cooperation_status' => ['in','1,2'],'game.is_show' => 1])
  257. ->order('game.create_time desc,game.xulie desc')
  258. ->limit(9)
  259. ->select();
  260. foreach ( $newGameList as &$game ) {
  261. $game['icon'] = STATIC_DOMAIN.$game['mobileicon'];
  262. $game['size'] = getSize($game);
  263. $game['typename'] = getTypename($game['typename']);
  264. $game['subjectname'] = getSubjectname($game['subjectname']);
  265. $game['url'] = getGameUrl($game['id']);
  266. }
  267. //猜你喜欢游戏列表(读取和当前详情页的游戏相同类型 或者 题材的游戏,不重复显示同一款游戏而且不包括当前详情页的这款游戏)
  268. $relGameList = array();
  269. $whereSql = '';
  270. if(intval($detail['type']) || intval($detail['subject'])){
  271. if(intval($detail['type']) && intval($detail['subject'])){
  272. $whereSql = '(game.type='.intval($detail['type']).') or (game.subject='.intval($detail['subject']).')';
  273. }
  274. else if(intval($detail['type'])){
  275. $whereSql = '(game.type='.intval($detail['type']).')';
  276. }
  277. else if(intval($detail['subject'])){
  278. $whereSql = '(game.subject='.intval($detail['subject']).')';
  279. }
  280. }
  281. if($whereSql){
  282. $relGameList = $gameModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  283. ->alias('game')
  284. ->join('cy_gameinfo info', 'game.id = info.game_id')
  285. ->join('cy_gametype t', 'game.type = t.id','left')
  286. ->join('cy_gamesubject s', 'game.subject = s.id','left')
  287. ->field('game.id,game.nickname,game.power,info.androidurl,game.pinyin,info.mobileicon,game.type,game.subject,t.name as typename,s.name as subjectname')
  288. ->where(['game.cooperation_status' => ['in','1,2'],'game.is_show' => 1,'game.id' => ['neq',$gameid]])
  289. ->where($whereSql)
  290. ->orderRaw('rand()')
  291. ->limit(14)
  292. ->select();
  293. foreach ( $relGameList as &$game ) {
  294. $game['icon'] = STATIC_DOMAIN.$game['mobileicon'];
  295. $game['size'] = getSize($game);
  296. $game['typename'] = getTypename($game['typename']);
  297. $game['subjectname'] = getSubjectname($game['subjectname']);
  298. $game['url'] = getGameUrl($game['id']);
  299. }
  300. }
  301. // var_dump($relGameList);
  302. //文章内页广告推荐
  303. $adList = Db::connect(config('database_slave'))->table('cy_ad')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->field('id,title,url,image')->where(['type'=>99])->order('sort asc,create_time asc')->limit(0,1)->select();
  304. foreach ( $adList as &$ad ) {
  305. $ad['image'] = getNewsImage($ad['image']);
  306. }
  307. // var_dump($adList);
  308. if($p_type=='info'){
  309. $title = $detail['nickname'].'下载_祈盟文化';
  310. }
  311. else if($p_type=='news'){
  312. $title = $detail['nickname'].'资讯攻略_祈盟文化';
  313. }
  314. else if($p_type=='gift'){
  315. $title = $detail['nickname'].'礼包_祈盟文化';
  316. }
  317. else if($p_type=='server'){
  318. $title = $detail['nickname'].'开服开测_祈盟文化';
  319. }
  320. else{
  321. $title = $detail['nickname'].'下载_祈盟文化';
  322. }
  323. $seo['title'] = $title;
  324. $seo['keywords'] = $detail['nickname'].','.$detail['nickname'].'下载,'.$detail['nickname'].'安卓版,'.$detail['nickname'].'攻略,'.$detail['nickname'].'资讯,'.$detail['nickname'].'礼包,'.$detail['nickname'].'开服,'.$detail['nickname'].'开测';
  325. $seo['description'] = '祈盟文化'.$detail['nickname'].'手游专区,为您免费提供'.$detail['nickname'].'安卓版游戏下载,最实用的'.$detail['nickname'].'手游攻略资讯,还有'.$detail['nickname'].'礼包激活码等你拿,欢迎来祈盟文化下载'.$detail['nickname'].'。';
  326. $this->assign('seo',$seo);
  327. $this->assign('detail',$detail);
  328. $this->assign('newGameList',$newGameList);
  329. $this->assign('adList',$adList);
  330. $this->assign('relGameList',$relGameList);
  331. }
  332. /**
  333. * 开服、开测--列表
  334. */
  335. public function getGameServer($game_id,$type) {
  336. /*$type = $this->request->param('t',1,'intval');*/
  337. if (!in_array($type,[0,1])) $type = 0;
  338. $game_id = intval($game_id);
  339. $where = [
  340. 'gameid'=>intval($game_id),
  341. 'type'=>$type,
  342. 'isdelete'=>0,
  343. ];
  344. $nowtime = NOW_TIMESTAMP;
  345. if($type==1){
  346. $list = Db::connect(config('database_slave'))->table('cy_serverinfo')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  347. ->field('id,gameid,sername,sertime,serstatus,type,sercertype')
  348. ->where($where)
  349. ->where("( ( sertime > {$nowtime} and sercertype = 1 ) or sercertype = 2 )")
  350. ->order('sercertype asc,sertime asc')
  351. ->paginate(10, false, array('path'=>'javascript:AjaxTestPage([PAGE]);',))
  352. ->each(function ($item, $key){
  353. $td = date("Y-m-d");
  354. $tm = date("Y-m-d",strtotime("+1 day"));
  355. $item['subscribe'] = 1; // 预约游戏
  356. $item['serverName'] = '';
  357. if ($item['sercertype'] == 1){
  358. if(date("Y-m-d",$item['sertime']) == $td){
  359. $item['serverDate'] = '今日';
  360. $item['serverTime'] = date('H:i',$item['sertime']);
  361. }
  362. else if(date("Y-m-d",$item['sertime']) == $tm){
  363. $item['serverDate'] = '明日';
  364. $item['serverTime'] = date('H:i',$item['sertime']);
  365. }
  366. else{
  367. $item['serverDate'] = date('m',$item['sertime']).'月'.date('d',$item['sertime']).'日';
  368. $item['serverTime'] = date('H:i',$item['sertime']);
  369. }
  370. if( $item['sertime'] <= NOW_TIMESTAMP + 60*60){
  371. $item['subscribe'] = 0;
  372. }
  373. }
  374. else{
  375. $item['serverDate'] = '长期有效';
  376. $item['serverTime'] = '长期有效';
  377. $item['subscribe'] = 0;
  378. }
  379. if($item['type'] == 1){
  380. $item['serverName'] = $this->_serstatus[$item['serstatus']];
  381. }
  382. else{
  383. $item['serverName'] = $item['sername'];
  384. }
  385. return $item;
  386. });
  387. }
  388. else{
  389. $list = Db::connect(config('database_slave'))->table('cy_serverinfo')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  390. ->field('id,gameid,sername,sertime,serstatus,type,sercertype')
  391. ->where($where)
  392. ->where("( ( sertime > {$nowtime} and sercertype = 1 ) or sercertype = 2 )")
  393. ->order('sercertype asc,sertime asc')
  394. ->paginate(10, false, array('path'=>'javascript:AjaxServicePage([PAGE]);',))
  395. ->each(function ($item, $key){
  396. $td = date("Y-m-d");
  397. $tm = date("Y-m-d",strtotime("+1 day"));
  398. $item['subscribe'] = 1; // 预约游戏
  399. $item['serverName'] = '';
  400. if ($item['sercertype'] == 1){
  401. if(date("Y-m-d",$item['sertime']) == $td){
  402. $item['serverDate'] = '今日';
  403. $item['serverTime'] = date('H:i',$item['sertime']);
  404. }
  405. else if(date("Y-m-d",$item['sertime']) == $tm){
  406. $item['serverDate'] = '明日';
  407. $item['serverTime'] = date('H:i',$item['sertime']);
  408. }
  409. else{
  410. $item['serverDate'] = date('m',$item['sertime']).'月'.date('d',$item['sertime']).'日';
  411. $item['serverTime'] = date('H:i',$item['sertime']);
  412. }
  413. if( $item['sertime'] <= NOW_TIMESTAMP + 60*60){
  414. $item['subscribe'] = 0;
  415. }
  416. }
  417. else{
  418. $item['serverDate'] = '长期有效';
  419. $item['serverTime'] = '长期有效';
  420. $item['subscribe'] = 0;
  421. }
  422. if($item['type'] == 1){
  423. $item['serverName'] = $this->_serstatus[$item['serstatus']];
  424. }
  425. else{
  426. $item['serverName'] = $item['sername'];
  427. }
  428. return $item;
  429. });
  430. }
  431. $TempDate = '';
  432. foreach ( $list as &$item ) {
  433. if($item['serverDate'] == $TempDate){
  434. $item['serverDate'] = '';
  435. }
  436. else{
  437. $TempDate = $item['serverDate'];
  438. }
  439. }
  440. return ['list'=>$list,'page'=>$list->render()];
  441. }
  442. // 搜索游戏关键字
  443. public function ajaxGameList()
  444. {
  445. $keyword = input('keyword');
  446. $list = (new GameModel())->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->alias('game')
  447. ->join('cy_gameinfo info', 'game.id = info.game_id')
  448. ->join('cy_sdkgamelist sdk', 'game.id=sdk.gameid and sdk.package_type=0 and sdk.upload_status=1 and sdk.channel_id='.MEMBER_DEFAULT_CHANNEL_ID,'left')
  449. ->where(['game.cooperation_status' => ['in','1,2'],'game.is_show' => 1])
  450. ->where('game.nickname|game.pinyin','like','%'. $keyword .'%')
  451. ->field('LENGTH(game.nickname) as tLen,LOCATE("'.$keyword.'",game.nickname) as tIndex,LOCATE("'.$keyword.'",game.pinyin) as cIndex,game.id,game.nickname')
  452. ->order('tIndex,cIndex,tLen,game.create_time desc')
  453. ->limit(10)
  454. ->select();
  455. foreach ($list as $key => &$value) {
  456. $value['nickname'] = preg_replace("/($keyword)/i","<b style=\"color:#51a7ff\">\\1</b>",$value['nickname']);
  457. }
  458. return $list;
  459. }
  460. public function download() {
  461. $gameModel = new GameModel;
  462. $gameid = intval(input('id'));
  463. if(!$gameid) {
  464. $this->_abort404();
  465. }
  466. $this->gameDetail('info');
  467. return $this->fetch();
  468. }
  469. /**
  470. * 获取 我的游戏
  471. */
  472. public function _getMyGame($where,$equipment=1){
  473. $list = model('MemberChannelGame')
  474. ->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  475. ->alias('a')
  476. ->join('cy_members b','a.member_id = b.id')
  477. ->join('cy_game c','a.game_id = c.id')
  478. ->join('cy_gameinfo info', 'c.id = info.game_id')
  479. ->join('cy_sdkgamelist sdk', 'c.id=sdk.gameid and sdk.package_type=0 and sdk.upload_status=1 and sdk.channel_id='.MEMBER_DEFAULT_CHANNEL_ID,'left')
  480. ->field('c.id,c.nickname,c.is_show,c.cooperation_status,c.subject,c.type,info.mobileicon,sdk.filename,c.pinyin')
  481. ->where($where)
  482. /*->orderRaw("field(c.is_show,1) and field(c.cooperation_status,0,1,2) desc, field(c.is_show,0) and field(c.cooperation_status,0,1,2) desc, c.nickname asc")*/
  483. ->orderRaw("field(c.is_show,1) and field(c.cooperation_status,0,1,2) desc, field(c.is_show,0) and field(c.cooperation_status,0,1,2) desc, convert(c.nickname using gbk) asc")
  484. /*->orderRaw("c.nickname asc")*/
  485. ->paginate(10, false, array('path'=>'javascript:AjaxGamePage([PAGE]);'))
  486. ->each(function ($item, $key)use($equipment){
  487. $item['download'] = '';
  488. $item['gstatus'] = '已下架';
  489. if ($item['is_show']){
  490. if ($item['cooperation_status'] != 3) $item['gstatus'] = '正常';
  491. $item['download'] = getDownload($item);
  492. }else{
  493. if ($item['cooperation_status'] != 3) $item['gstatus'] = '非运营状态';
  494. }
  495. $item['icon'] = STATIC_DOMAIN.$item['mobileicon'];
  496. /*$item['size'] = getSize($item);*/
  497. $item['subject_name'] = Db::connect(config('database_slave'))->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->table('cy_gamesubject')->where('id',$item['subject'])->value('name') ? : '未知';
  498. $item['type_name'] = Db::connect(config('database_slave'))->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->table('cy_gametype')->where('id',$item['type'])->value('name') ? : '未知';
  499. $item['gameUrl'] = getGameUrl($item['id'],$equipment);
  500. return $item;
  501. });
  502. return ['list'=>$list,'page'=>$list->render()];
  503. }
  504. /**
  505. * 猜你喜欢
  506. * @param int $isRand 是否在最新游戏前100条中随机挑n款出来 1是,0否
  507. * @param array $condition 附加搜索条件
  508. * @param int $num 挑n款出来
  509. * @param int $equipment 1pc端,2手机端
  510. */
  511. public function _guessLikeGame($isRand=0,$condition=[],$num=10,$equipment=1){
  512. $gameModel = (new GameModel);
  513. $where = [
  514. 'game.is_show' => 1 ,
  515. 'game.cooperation_status' => ['in' , [1 , 2]] ,
  516. 'game.nickname' => ['neq' , ''] ,
  517. ];
  518. $notinId = [];
  519. if (!empty($condition['game.id'])) {
  520. $notinId['game.id'] = $condition['game.id'];
  521. unset($condition['game.id']);
  522. }
  523. $sqlStr = '';
  524. foreach ($condition as $k=>$v){
  525. if (isset($v[1]) && count($v[1])) {
  526. $itemStr = '('.implode(',',$v[1]).')';
  527. $sqlStr .= $k.' '.$v[0] . ' '. $itemStr . ' or ';
  528. }
  529. }
  530. if (strlen($sqlStr) > 3)$sqlStr = substr($sqlStr,0,-3);
  531. if ($isRand) {
  532. $idArr = $gameModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->alias('game')->where($where)->order('game.xulie desc')->limit(0 , 100)->column('game.id,game.name');
  533. if(count($idArr) < $num){
  534. $num = count($idArr);
  535. }
  536. $keyArr = array_rand($idArr , $num);
  537. $where['game.id'] = ['in' , $keyArr];
  538. }
  539. $guessLike = $gameModel->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->alias('game')
  540. ->join('cy_gameinfo info' , 'game.id = info.game_id')
  541. ->join('cy_gametype t' , 'game.type = t.id' , 'left')
  542. ->join('cy_gamesubject s' , 'game.subject = s.id' , 'left')
  543. ->join('cy_sdkgamelist sdk' , 'game.id=sdk.gameid and sdk.package_type=0 and sdk.upload_status=1 ' , 'left')
  544. ->field('game.id,game.nickname,game.power,info.androidurl,game.pinyin,info.mobileicon,game.type,game.subject,t.name as type_name,s.name as subject_name,sdk.filename')
  545. /*->fetchSql(true)*/
  546. ->where($where)
  547. ->where($sqlStr)
  548. ->where($notinId)
  549. ->group('game.id')
  550. ->orderRaw("rand()")
  551. ->limit($num)
  552. ->select();
  553. /*dump($guessLike);exit;*/
  554. foreach ($guessLike as &$game) {
  555. $game['icon'] = STATIC_DOMAIN.$game['mobileicon'];
  556. $game['size'] = getSize($game);
  557. $game['type_name'] = getTypename($game['type_name']);
  558. $game['subject_name'] = getSubjectname($game['subject_name']);
  559. $game['gameUrl'] = getGameUrl($game['id'],$equipment);
  560. $game['download'] = getDownload($game);
  561. }
  562. return empty($guessLike) ? [] : $guessLike;
  563. }
  564. }