diff --git a/res/js/yohood.js b/res/js/yohood.js index 3d759a5..d54abb2 100644 --- a/res/js/yohood.js +++ b/res/js/yohood.js @@ -64,8 +64,7 @@ define('yohood', function(require, exports) { } //设置商品滚动条 function setGoodsSwiper() { - var goodsSwiper, - limitedPrev, + var limitedPrev, limitedNext, swiperLen; //限量商品滑动 diff --git a/website/controller/News.class.php b/website/controller/News.class.php index e8647b9..6deb773 100644 --- a/website/controller/News.class.php +++ b/website/controller/News.class.php @@ -10,7 +10,8 @@ class Controller_News extends Controller_Abstract $requestTag = trim($this->_request->tag);//标签 $limit = 40; $tag = $requestTag; - if($this->_platform == 'android' || $this->_platform == 'iphone') + $exceptTags = array('手机视频'); + /*if($this->_platform == 'android' || $this->_platform == 'iphone') { $exceptTags = array('视频'); if($requestTag == '视频') @@ -21,7 +22,7 @@ class Controller_News extends Controller_Abstract else { $exceptTags = array('手机视频'); - } + }*/ $total = Facade_News::getTotal($tag, $exceptTags); $page = new Lib_Helper_Pagination($total, $limit); if ($tag) @@ -67,7 +68,8 @@ class Controller_News extends Controller_Abstract public function indexMobileAction() { $requestTag = $tag = trim($this->_request->tag);//标签 - $exceptTags = array('视频'); + // $exceptTags = array('视频'); + $exceptTags = array('手机视频'); $limit = 8; $total = Facade_News::getTotal($tag, $exceptTags); $page = new Lib_Helper_Pagination($total, $limit); @@ -89,7 +91,7 @@ class Controller_News extends Controller_Abstract $tags[$tagKey] = $temp[$tagKey]; } } - $tags['视频'] = $temp['手机视频']; + // $tags['视频'] = $temp['手机视频']; $this->_view['tags'] = $tags; foreach($this->_view['tags'] as $val) { @@ -97,7 +99,7 @@ class Controller_News extends Controller_Abstract } $this->_view['current_tag'] = $requestTag; $this->_view['isAjax'] = $this->_request->isAjax(); - $this->_view['total'] = $total; + $this->_view['pageTotal'] = $total; $this->_view['limit'] = $limit; $this->_view['page'] = $page->getCurrentPage(); } @@ -202,12 +204,17 @@ EOT; } if($this->_platform == 'android' || $this->_platform == 'iphone') { - $exceptTags = array('视频'); - $news[] = Facade_News::getSameNewsById($id, $exceptTags); - $temp = Facade_News::getList(array(), 0, 5, $exceptTags); - unset($temp[$id]); - $news = array_merge($news, $temp); - $news = array_slice(array_filter($news), 0, 3); + //$exceptTags = array('视频'); + $exceptTags = array('手机视频'); + $temp = Facade_News::getSameNewsById($id, $exceptTags); + $temp2 = Facade_News::getLatestNews(array(), 0, 5, $exceptTags); + unset($temp2[$id]); + if(!empty($temp)) + { + $news = array($temp['id'] => $temp); + } + $news = array_slice(array_filter($news + $temp2), 0, 3); + $this->_view['wechat'] = array();//Lib_Wechat_JSSDK::getSignPackage(); } $info['title'] = strip_tags($info['title']); $info['pics'] = array_filter(explode('|', $info['pics'])); @@ -231,11 +238,14 @@ EOT; $tag = '视频'; $exceptTags = array('手机视频'); $recom = array(); - $recom[] = Facade_News::getSameNewsById($id, $exceptTags); - $temp = Facade_News::getList(array(), 0, 5, $exceptTags); - unset($temp[$id]); - $recom = array_merge($recom, $temp); - $recom = array_slice(array_filter($recom), 0, 3); + $temp = Facade_News::getSameNewsById($id, $exceptTags); + $temp2 = Facade_News::getLatestNews(array(), 0, 5, $exceptTags); + unset($temp2[$id]); + if(!empty($temp)) + { + $recom = array($temp['id'] => $temp); + } + $recom = array_slice(array_filter($recom + $temp2), 0, 3); $hotVideo = array_values(Facade_News::getListByDateHits($tag, 0, 5, $exceptTags)); $lastVideo = array_values(Facade_News::getLatestNews($tag, 0, 5, $exceptTags)); $list['recom'] = $recom; diff --git a/website/controller/Show.class.php b/website/controller/Show.class.php index 7a967ed..51e5893 100644 --- a/website/controller/Show.class.php +++ b/website/controller/Show.class.php @@ -72,7 +72,7 @@ class Controller_Show extends Controller_Abstract 'offset'=> $offset, 'limit' => $limit, ); - $data = Util_Curl::get('http://www.yohoshow.com/api/yohood/topic?'.http_build_query($params)); + $data = Util_Curl::get('http://show.test.yoho.cn/api/yohood/topic?'.http_build_query($params)); $data = json_decode($data, true); if(!empty($data['data'])) { diff --git a/website/facade/News.class.php b/website/facade/News.class.php index bd97c47..f21b9ed 100644 --- a/website/facade/News.class.php +++ b/website/facade/News.class.php @@ -273,7 +273,7 @@ class Facade_News $news = array(); if(!empty($ids)) { - $news = self::service()->getNewsByOrderId($ids, $exceptTags); + $news = self::service()->getNewsByIds($ids, $exceptTags); } return $news; } diff --git a/website/lib/utils/cache/Data.class.php b/website/lib/utils/cache/Data.class.php index 08d3abf..e9c7b88 100644 --- a/website/lib/utils/cache/Data.class.php +++ b/website/lib/utils/cache/Data.class.php @@ -11,7 +11,7 @@ class Lib_Utils_Cache_Data { private static $_key = 'yh_cache_data_'; private static $_cache = null; - private static $_options = array('domain' => 'wwww', 'class' => 'text'); + private static $_options = array('domain' => 'yoho', 'class' => 'text'); /** * @return object 缓存操作对象 diff --git a/website/lib/wechat/JSSDK.class.php b/website/lib/wechat/JSSDK.class.php new file mode 100644 index 0000000..5213c61 --- /dev/null +++ b/website/lib/wechat/JSSDK.class.php @@ -0,0 +1,105 @@ +<?php +class Lib_Wechat_JSSDK { + public static $appId = YOHO_WECHAT_APPID; + public static $appSecret = YOHO_WECHAT_APPSECRET; + + public static function getSignPackage() + { + $jsapiTicket = self::getJsApiTicket(); + + // 注意 URL 一定要动态获取,不能 hardcode. + /* $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; + $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; */ + // 确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。 + $url = $_REQUEST['pageurl']; + $timestamp = time(); + $nonceStr = self::createNonceStr(); + + // 这里参数的顺序要按照 key 值 ASCII 码升序排序 + $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; + + $signature = sha1($string); + + $signPackage = array( + "appId" => self::$appId, + "nonceStr" => $nonceStr, + "timestamp" => $timestamp, + "url" => $url, + "signature" => $signature, + "rawString" => $string + ); + return $signPackage; + } + + public static function createNonceStr($length = 16) + { + $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + $str = ""; + for ($i = 0; $i < $length; $i++) { + $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); + } + return $str; + } + + public static function getJsApiTicket() + { + // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 + $jsapi_ticket = Lib_Utils_Cache_Data::get("WEICHAT_JSAPI_TICK_1"); + if (empty($jsapi_ticket)) + { + //$accessToken = $this->getAccessToken(); + $accessToken = self::getAccessToken(); + // 如果是企业号用以下 URL 获取 ticket + // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken"; + $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; + $res = json_decode(self::httpGet($url)); + $ticket = $res->ticket; + if ($ticket) + { + Lib_Utils_Cache_Data::set("WEICHAT_JSAPI_TICK_1", $ticket, 3600); + } + } + else + { + $ticket = $jsapi_ticket; + } + return $ticket; + } + + + public static function getAccessToken() + { + $http_url = 'https://api.weixin.qq.com/cgi-bin/token?'; + $params = array('appid'=> self::$appId,'secret' => self::$appSecret,'grant_type'=>'client_credential'); + $access_token = Lib_Utils_Cache_Data::get("WEICHAT_ACCESSTOKEN"); + if(empty( $access_token )) + { + $result = json_decode(self::httpGet($http_url.http_build_query($params)), true); + $access_token = $result['access_token']; + $expire = $result['expires_in']; + Lib_Utils_Cache_Data::set("WEICHAT_ACCESSTOKEN", $access_token, 3600); + } + if($access_token) + { + return $access_token; + } + else + { + return ''; + } + } + + public static function httpGet($url) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_TIMEOUT, 500); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($curl, CURLOPT_URL, $url); + $res = curl_exec($curl); + curl_close($curl); + return $res; + } +} + diff --git a/website/service/News.class.php b/website/service/News.class.php index 5b8bd05..1c2bdbe 100644 --- a/website/service/News.class.php +++ b/website/service/News.class.php @@ -256,7 +256,7 @@ class Service_News extends Lib_Service * @param array $exceptTags * @return int */ - public function getNewsByOrderId($ids, $exceptTags) + public function getNewsByIds($ids, $exceptTags) { $exceptWhere = "1"; if(is_numeric($ids)) @@ -269,7 +269,7 @@ class Service_News extends Lib_Service $exceptTags = implode("','", $exceptTags); $exceptWhere = " `tag` NOT IN ('$exceptTags') "; } - return self::service(self::ROUTER)->tag(self::$_tag)->fetchRow('getNewsByOrderId', array('order_ids' => $ids), + return self::service(self::ROUTER)->tag(self::$_tag)->fetchRow('getNewsByIds', array(), array('where'=> $exceptWhere, 'ids'=> $ids)); } @@ -284,7 +284,8 @@ class Service_News extends Lib_Service */ public static function getLatestNews($tag, $offset, $limit, $exceptTags = array()) { - $exceptWhere = "1"; + $exceptWhere = '1'; + $where = '1'; if(is_array($exceptTags) && !empty($exceptTags)) { $exceptTags = implode("','", $exceptTags); diff --git a/website/sqlmap/news/sqlmap-news.xml b/website/sqlmap/news/sqlmap-news.xml index 8df7e6a..a15eea2 100644 --- a/website/sqlmap/news/sqlmap-news.xml +++ b/website/sqlmap/news/sqlmap-news.xml @@ -45,8 +45,8 @@ <select id="getListByHits"> SELECT * FROM tbl_news WHERE `tag` = :tag AND #where# ORDER BY hits DESC LIMIT :offset, :limit </select> - <select id="getNewsByOrderId"> - SELECT * FROM tbl_news WHERE #where# AND id IN (#ids#) ORDER BY FIND_IN_SET(id, :order_ids) + <select id="getNewsByIds"> + SELECT * FROM tbl_news WHERE #where# AND id IN (#ids#) ORDER BY create_time DESC </select> <select id="getLatestNews"> SELECT * FROM `tbl_news` #where# order by create_time DESC LIMIT :offset, :limit diff --git a/website/view/layout/default_layout_mobile.php b/website/view/layout/default_layout_mobile.php index 7479462..b819d68 100644 --- a/website/view/layout/default_layout_mobile.php +++ b/website/view/layout/default_layout_mobile.php @@ -45,7 +45,7 @@ <div class="overlay"></div> </div> <?php $this->_js('index.js', array( - SITE_JS . '/lib/seajs.js', + SITE_JS . '/lib/seajs.js' ));?> <script type="text/javascript"> seajs.use('mobile',function(mobile){ diff --git a/website/view/script/news/detailmobile.php b/website/view/script/news/detailmobile.php index bda48bb..9f50cca 100644 --- a/website/view/script/news/detailmobile.php +++ b/website/view/script/news/detailmobile.php @@ -70,7 +70,7 @@ <div id="share" class="share" cover-url="<?php $thumb = empty($this->view->info['client_thumb']) ? $this->view->info['thumb'] : $this->view->info['client_thumb']; echo Lib_Images::getImageUrl($thumb, 'source','fragmentimg');?>" - data-link="<?php echo SITE_MAIN.'/news/detail/id/'.$this->view->info['id'];?>"> + data-link="<?php echo SITE_MAIN.'/news/detail/id/'.$this->view->info['id'];?>" wechatAppId="" wechatTimestamp="" wechatNonceStr="" wechatSignature=""> <ul class="clearfix"> <li class="yohoo-share-button-sina"><a href="javascript:;"></a></li> <li class="yohoo-share-button-qq"><a href="javascript:;"></a></li> @@ -79,9 +79,47 @@ </div> <?php $this->_endblock();?> <?php $this->_block('js');?> +<script type="text/javascript" charset="utf-8" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/javascript"> - seajs.use(['zepto', 'mobile'],function($, mobile) { + var shareData = { + title: '', + desc: '', + imgUrl: '', + link: '', + }; +// wx.config({ +// debug: false, +// appId: '', +// timestamp: '', +// nonceStr: '', +// signature: '', +// jsApiList: ['checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ', +// 'onMenuShareWeibo','hideMenuItems','showMenuItems','hideAllNonBaseMenuItem','showAllNonBaseMenuItem', +// 'translateVoice','startRecord','stopRecord','onRecordEnd','playVoice','pauseVoice','stopVoice', +// 'uploadVoice','downloadVoice','chooseImage','previewImage','uploadImage','downloadImage', +// 'getNetworkType','openLocation','getLocation','hideOptionMenu','showOptionMenu','closeWindow', +// 'scanQRCode','chooseWXPay','openProductSpecificView','addCard','chooseCard','openCard' +// ] +// }); +// // 2.1 “分享给朋友” +// wx.onMenuShareAppMessage(shareData); +// // 2.2 “分享到朋友圈” +// wx.onMenuShareTimeline(shareData); +// // 2.3 “分享到QQ” +// wx.onMenuShareQQ(shareData); +// // 2.4 “分享到微博” +// wx.onMenuShareWeibo(shareData); + + seajs.use(['jquery', 'mobile'],function($, mobile) { mobile.detail(); + var shareUrl = $(".share").attr("data-link"), + shareCover = $(".share").attr("cover-url"), + detailTitle = $('.detail-title').find('.title'), + detailSubtitle = $('.detail-title').find('.subtitle'), + wechatAppId = $(".share").attr("wechatAppId"), + wechatTimestamp = $(".share").attr("wechatTimestamp"), + wechatNonceStr = $(".share").attr("wechatNonceStr"), + wechatSignature = $(".share").attr("wechatSignature"); }); </script> <?php $this->_endblock();?> diff --git a/website/view/script/news/indexmobile.php b/website/view/script/news/indexmobile.php index b56f39e..75ca757 100644 --- a/website/view/script/news/indexmobile.php +++ b/website/view/script/news/indexmobile.php @@ -19,7 +19,7 @@ </div> <div class="news-main content-main current"> <div class="news-content"> - <div class="main-layout clearfix" total="<?php echo $this->view->total;?>" page="<?php echo $this->view->page;?>" + <div class="main-layout clearfix" total="<?php echo $this->view->pageTotal;?>" page="<?php echo $this->view->page;?>" total_times="3" current_tag="<?php echo $this->view->current_tag;?>" limit="<?php echo $this->view->limit;?>"> <?php $this->_widget('news_listmobile', array('list'=> $this->view->list));?> </div>