Thinkphp框架开发移动端接口(2)


Posted in PHP onAugust 18, 2016

接着上一篇介绍Thinkphp框架开发移动端接口(1),另外我们还可以通过ThinkPHP实现移动端访问自动切换主题模板,这样也可以做到移动端访问

ThinkPHP的模板主题机制,如果只是在PC,只要需修改 DEFAULT_THEME (新版模板主题默认是空,表示不启用模板主题功能)配置项就可以方便的实现多模板主题切换。

但对于移动端和PC端,也许你会设计完全不同的主题风格,且针对不同的来路提供不同的渲染方式,其中一种比较流行的方法是“响应式设计”,但就本人经历而言,要实现完全的“响应式设计”并不是那么容易,且解决兼容问题也是个难题,假设是大型站点,比如:淘宝、百度、拍拍这些,响应式设计肯定是满足不了需求的,而是需要针对手机访问用户提供单独的手机网站。

ThinkPHP 完全可以实现,而且相当简单。和TPM的智能模版切换引擎一样,只要对来路进行判断处理即可。

1、将 ismobile() 加入到{项目/Common/common.php}

function ismobile() {
 // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
 if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
 return true;
 
 //此条摘自TPM智能切换模板引擎,适合TPM开发
 if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
 return true;
 //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
 if (isset ($_SERVER['HTTP_VIA']))
 //找不到为flase,否则为true
 return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
 //判断手机发送的客户端标志,兼容性有待提高
 if (isset ($_SERVER['HTTP_USER_AGENT'])) {
 $clientkeywords = array(
  'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile'
 );
 //从HTTP_USER_AGENT中查找手机浏览器的关键字
 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
  return true;
 }
 }
 //协议法,因为有可能不准确,放到最后判断
 if (isset ($_SERVER['HTTP_ACCEPT'])) {
 // 如果只支持wml并且不支持html那一定是移动设备
 // 如果支持wml和html但是wml在html之前则是移动设备
 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
  return true;
 }
 }
 return false;
 }

2、在{项目/Lib/}创建一个 CommonAction.php,如果你的项目已公共控制器,则无需创建,直接加在里面即可。

Class CommonAction extends Action{
 Public function _initialize(){
 //移动设备浏览,则切换模板
 if (ismobile()) {
  //设置默认默认主题为 Mobile
  C('DEFAULT_THEME','Mobile');
 }
 //............你的更多代码.......
 }
 }

通过以上2种方式均可实现移动端访问,一种是原生,一种是伪原生,小伙伴们根据自己的项目需求来选择吧。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
PHP实时显示输出
Oct 02 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
php三维数组去重(示例代码)
Nov 26 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
Dec 20 PHP
详细分析PHP7与PHP5区别
Jun 26 PHP
Thinkphp框架开发移动端接口(1)
Aug 18 #PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 #PHP
PHP文件下载实例代码浅析
Aug 17 #PHP
PHP Ajax实现无刷新附件上传
Aug 17 #PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 #PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 #PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 #PHP
You might like
用PHP实现的随机广告显示代码
2007/06/14 PHP
让PHP支持页面回退的两种方法
2008/01/10 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
基于VUE实现的九宫格抽奖功能
2018/09/30 Javascript
js 实现在2d平面上画8的方法
2018/10/10 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
python实现保存网页到本地示例
2014/03/16 Python
Python返回真假值(True or False)小技巧
2015/04/10 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
python3 使用traceback定位异常实例
2020/03/09 Python
详解Python IO口多路复用
2020/06/17 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
代理班主任的自我评价
2014/02/04 职场文书
售后服务经理岗位职责范本
2014/02/22 职场文书
《画》教学反思
2014/04/14 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
感谢信格式范文
2015/01/22 职场文书
员工自我评价范文
2015/03/11 职场文书
专职安全员岗位职责
2015/04/11 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
独生子女证明范本
2015/06/19 职场文书
Python使用MapReduce进行简单的销售统计
2022/04/22 Python