Yii2中继承一个公共类实现微信端wap端和PC端分离的方法
- 7511
- PHP
- 4
- super_dodo
- 2016/03/09
随着移动互联网的崛起,现在的客户越来越重视产品的移动互联网化,也就是一个网站项目需要有三个版本展示个用户。也就是传统的PC站点,微信端的微网站,和Wap端的网站。
有两种方案可以解决网站的不同终端的适配问题,一种是使用css3的 @media screen and (min-width: 1000px)这种方式,对于网站结构简单的可以使用这种方式,这种方式可以使多个终端访问同一个地址,看到的效果不一样。另外一种也就是现在要介绍的,根据判断是否是手机浏览器,微信浏览器进行分流。这样可以做出不同风格的版面,且自定义的程度高,扁平化,单一页面维护简单,缺点是页面多维护多,不过能提升B格也是值得的。
需求分析:建一个VController来进行分流。
示例一个pc的地址是 http://www.dodobook.net/php?id=1 当到微信端http://www.dodobook.net/wx/php/view?id=1 到wap端 http://www.dodobook.net/wap/php/view?id=1 此处的wx,wap是在控制器下面的目录中 wx 的目录下面有php 这个控制器,里面有view这个方法 目录结构如下图

直接上VController的代码
<?php
//DoDoBook V2016
namespace app\components;
use Yii;
use app\extensions\common\MobileDetect; //检测PC--手机--微信浏览器
//PC端 微信扫描支付+支付宝支付--手机号登陆(1000px)
//WAP端 微信扫码支付+支付宝支付--手机号登陆(320*)
//WX端 微信直接JSAPI支付--微信直接授权登陆(320*)
class VController extends BaseController{
//控制器之前先判断用户的浏览器
public function beforeAction($action) {
if(Yii::$app->params['isLocalEnvironment'] == 'YES'){
return true;
}
// return true;
$wxWapId = Yii::$app->controller->id; //当前控制器
if(Yii::$app->controller->id == 'site' && Yii::$app->controller->action->id == 'error'){
return true;
}
$detect = new MobileDetect();
$realWxWapId = '';
if($detect->isMobile()) {
if($detect->isWeixin()){ //是微信浏览器
if(stripos($wxWapId,"wx/") === 0 ){ //在控制器里面查找到wx
return true;
}else if(stripos($wxWapId,"wap/") === 0 ){ //是手机网页的浏览器
$realWxWapId = str_replace('wap/', 'wx/', $wxWapId); //替换目录
}else{
$realWxWapId = 'wx/'.$wxWapId; //加深目录
}
}else{ //其他手机浏览器
if(stripos($wxWapId,"wap/") === 0 ){ //在控制器里面查找到wx
return true;
}else if(stripos($wxWapId,"wx/") === 0 ){ //是手机网页的浏览器
$realWxWapId = str_replace('wx/', 'wap/', $wxWapId); //替换目录
}else{
$realWxWapId = 'wap/'.$wxWapId; //加深目录
}
}
}else{ //PC端
if(stripos($wxWapId,"wx/") === 0 ){ //在控制器里面查找到wx
$realWxWapId = str_replace('wx/', '', $wxWapId); //替换目录
}else if(stripos($wxWapId,"wap/") === 0 ){ //是手机网页的浏览器
$realWxWapId = str_replace('wap/', '', $wxWapId); //替换目录
}else{
return true;
}
}
if($realWxWapId){ //需要跳转--组装新的URL
if($_SERVER['QUERY_STRING']){ //有查询字符串
$realWxWapPcUrl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$realWxWapId.'/'.Yii::$app->controller->action->id.'?'.$_SERVER['QUERY_STRING'];
}else{
$realWxWapPcUrl = '/'.$realWxWapId.'/'.Yii::$app->controller->action->id;
}
$this->redirect($realWxWapPcUrl); //跳转
}
}
}
改天我还将介绍一种先进简单的方式 即 wx wap是以module的形势存在的分流。
链接下一篇: Yii2中公共类实现微信端wap端和PC端分离的方法(Modules)
愿你早日学会逢场作戏,愿你早点习惯物是人非。愿你早日学会云淡风轻,愿你早日习惯多愁善感。
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例

