Search.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. // 搜索页
  3. namespace app\home\controller;
  4. use think\Db;
  5. use think\Config;
  6. use app\common\model\GameHome as GameModel;
  7. use app\common\model\News as NewsModel;
  8. class Search extends Home{
  9. /**
  10. * 初始化操作
  11. */
  12. protected function _initialize()
  13. {
  14. parent::_initialize();
  15. }
  16. /**
  17. * 搜索
  18. */
  19. public function index(){
  20. $keyword = input('keyword');
  21. $gameList = $this->_getGameList($keyword);
  22. $newsList = $this->_getNewsList($keyword);
  23. $adModel = Db::name('cy_ad');
  24. $adInfo = Db::connect(config('database_slave'))->table('cy_ad')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->where(['type'=>99])->order('sort asc,create_time asc')->find();
  25. $this->assign('adInfo',$adInfo);
  26. $this->assign('list',$gameList['list']);
  27. $this->assign('newsList',$newsList['list']);
  28. $this->assign('page',$gameList['page']);
  29. $this->assign('newsPage',$newsList['page']);
  30. $this->assign('keyword',$keyword);
  31. return $this->fetch();
  32. }
  33. // 游戏列表
  34. public function _getGameList($keyword) {
  35. $list = (new GameModel())->alias('game')->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  36. ->join('cy_gameinfo info', 'game.id = info.game_id')
  37. ->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')
  38. ->field('LENGTH(game.nickname) as tLen,LOCATE("'.$keyword.'",game.nickname) as tIndex,LOCATE("'.$keyword.'",game.pinyin) as cIndex,game.id,game.nickname,game.power,info.androidurl,game.pinyin,info.mobileicon,game.type,game.subject,sdk.filename')
  39. ->where(['game.cooperation_status' => ['in','1,2'],'game.is_show' => 1])
  40. ->where('game.nickname|game.pinyin','like','%'. $keyword .'%')
  41. ->order('tIndex, cIndex,tLen,game.create_time desc')
  42. ->paginate(9, false, array('path'=>'javascript:AjaxGamePage([PAGE]);',))
  43. ->each(function ($item, $key){
  44. $item['icon'] = getGameIcon($item['mobileicon']);
  45. $item['size'] = getSize($item);
  46. $item['download'] = getDownload($item);
  47. $item['subject'] = Db::connect(config('database_slave'))->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->table('cy_gamesubject')->where('id',$item['subject'])->value('name') ? : '未知';
  48. $item['type'] = Db::connect(config('database_slave'))->cache(Config::get('QUERY_RESULT_CACHE_TIME'))->table('cy_gametype')->where('id',$item['type'])->value('name') ? : '未知';
  49. $item['gameUrl'] = getGameUrl($item['id']);
  50. $item['libaonum'] = model('Gift')->where(['isdelete'=>0,'gameid'=>$item['id'],'endtime'=>['gt',NOW_TIMESTAMP]])->where('total > used')->count('id');
  51. return $item;
  52. });
  53. return ['list'=>$list,'page'=>$list->render()];
  54. }
  55. public function _getNewsList($keyword) {
  56. $newsList = (new NewsModel())->cache(Config::get('QUERY_RESULT_CACHE_TIME'))
  57. ->alias('a')
  58. ->join('cy_content b', 'a.id = b.id','left')
  59. ->field('a.id,a.title,a.image,a.jlink,a.create_time,a.total,a.zhiding,a.type,a.gameid,b.content')
  60. ->where(['a.isdelete' => 0,'a.type' => ['in',[1,2,3,4,5]]])
  61. ->where('a.title','like','%'. $keyword .'%')
  62. ->order('a.zhiding desc,a.id desc')
  63. ->paginate(10, false, array('path'=>'javascript:AjaxPage([PAGE]);',))
  64. ->each(function ($item, $key){
  65. $item['image'] = getNewsImage($item['image']);
  66. $item['url'] = getNewsUrl($item['id'],$item['jlink']);
  67. $item['createtime'] = date('Y-m-d H:i:s',$item['create_time']);
  68. $item['cutcontent'] = getCutcontent($item['content']);
  69. return $item;
  70. });
  71. return ['list'=>$newsList,'page'=>$newsList->render(),'keyword'=>$keyword];
  72. }
  73. }