TP3.2.x判断手机端访问,同一个域名在PC和手机端展示不同模板(半独立式网站)
首先介绍APP_STATUS内置常量,TP入口文件增加APP_STATUS 参数, 自动加载不同的项目配置文件,通过配置文件指向不同的模块
手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名
首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和Mobie.php
config.php文件中
<?php
return array( 'DEFAULT_MODULE'=>'Index', 'DEFAULT_CONTROLLER'=>'Index', 'DEFAULT_ACTION'=>'index', );
Mobie.php文件:
<?php
return array( 'DEFAULT_MODULE'=>'Mobie', 'DEFAULT_CONTROLLER'=>'Index', 'DEFAULT_ACTION'=>'index', );
关键在单入口index文件中添加手机端判断方法(方法建议放到最下面),在文件中的21行后面也就是“定义应用目录”结束后,加入代码:
if(is_mobile_request() ){ define('APP_STATUS','config_wap'); }else{ define('APP_STATUS','Index'); }
这样,就用关键的APP_STATUS来调用不同的模块,is_mobile_request()这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | function is_mobile_request(){ $_SERVER [ 'ALL_HTTP' ] = isset( $_SERVER [ 'ALL_HTTP' ]) ? $_SERVER [ 'ALL_HTTP' ] : '' ; $mobile_browser = '0' ; if (preg_match( '/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i' , strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]))) $mobile_browser ++; if ((isset( $_SERVER [ 'HTTP_ACCEPT' ])) and ( strpos ( strtolower ( $_SERVER [ 'HTTP_ACCEPT' ]), 'application/vnd.wap.xhtml+xml' ) !== false)) $mobile_browser ++; if (isset( $_SERVER [ 'HTTP_X_WAP_PROFILE' ])) $mobile_browser ++; if (isset( $_SERVER [ 'HTTP_PROFILE' ])) $mobile_browser ++; $mobile_ua = strtolower ( substr ( $_SERVER [ 'HTTP_USER_AGENT' ],0,4)); $mobile_agents = array ( 'w3c ' , 'acs-' , 'alav' , 'alca' , 'amoi' , 'audi' , 'avan' , 'benq' , 'bird' , 'blac' , 'blaz' , 'brew' , 'cell' , 'cldc' , 'cmd-' , 'dang' , 'doco' , 'eric' , 'hipt' , 'inno' , 'ipaq' , 'java' , 'jigs' , 'kddi' , 'keji' , 'leno' , 'lg-c' , 'lg-d' , 'lg-g' , 'lge-' , 'maui' , 'maxo' , 'midp' , 'mits' , 'mmef' , 'mobi' , 'mot-' , 'moto' , 'mwbp' , 'nec-' , 'newt' , 'noki' , 'oper' , 'palm' , 'pana' , 'pant' , 'phil' , 'play' , 'port' , 'prox' , 'qwap' , 'sage' , 'sams' , 'sany' , 'sch-' , 'sec-' , 'send' , 'seri' , 'sgh-' , 'shar' , 'sie-' , 'siem' , 'smal' , 'smar' , 'sony' , 'sph-' , 'symb' , 't-mo' , 'teli' , 'tim-' , 'tosh' , 'tsm-' , 'upg1' , 'upsi' , 'vk-v' , 'voda' , 'wap-' , 'wapa' , 'wapi' , 'wapp' , 'wapr' , 'webc' , 'winw' , 'winw' , 'xda' , 'xda-' ); if (in_array( $mobile_ua , $mobile_agents )) $mobile_browser ++; if ( strpos ( strtolower ( $_SERVER [ 'ALL_HTTP' ]), 'operamini' ) !== false) $mobile_browser ++; // Pre-final check to reset everything if the user is on Windows if ( strpos ( strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]), 'windows' ) !== false) $mobile_browser =0; // But WP7 is also Windows, with a slightly different characteristic if ( strpos ( strtolower ( $_SERVER [ 'HTTP_USER_AGENT' ]), 'windows phone' ) !== false) $mobile_browser ++; if ( $mobile_browser >0) return true; else return false; } |
参考TP文档:http://document.thinkphp.cn/manual_3_2.html#load_config
我还查到用JS判断的,没去亲自验证,代码如下:
(function(){ var res = GetRequest(); var par = res['index']; if(par!='gfan'){ var ua=navigator.userAgent.toLowerCase(); var contains=function (a, b){ if(a.indexOf(b)!=-1){return true;} }; var toMobileVertion = function(){ window.location.href = '手机站地址' } if(contains(ua,"ipad")||(contains(ua,"rv:1.2.3.4"))||(contains(ua,"0.0.0.0"))||(contains(ua,"8.0.552.237"))){return false} if((contains(ua,"android") && contains(ua,"mobile"))||(contains(ua,"android") && contains(ua,"mozilla")) ||(contains(ua,"android") && contains(ua,"opera")) ||contains(ua,"ucweb7")||contains(ua,"iphone")){toMobileVertion();} } })(); function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for(var i = 0; i < strs.length; i ++) { theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]); } } return theRequest; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 智能Agent如何改造传统工作流:从搜索到全能助手
2018-07-01 解决centos7.4 安装LAMP环境后报错:1130- Host xxx is not allowed to……