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中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
PHP采用get获取url汉字出现乱码的解决方法
Nov 13 PHP
PHP 错误处理机制
Jul 06 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 PHP
PHP常用函数之根据生日计算年龄功能示例
Oct 21 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 PHP
PHP实现文件上传操作和封装
Mar 04 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调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
JavaScript方法和技巧大全
2006/12/27 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
详解redux异步操作实践
2018/08/15 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
python中的for循环
2018/09/28 Python
浅谈python写入大量文件的问题
2018/11/09 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
自我鉴定范文
2013/11/10 职场文书
家长给孩子的评语
2014/01/30 职场文书
《风筝》教学反思
2014/04/10 职场文书
英文推荐信格式范文
2014/05/09 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
学生会自荐信
2019/05/16 职场文书
详解Python牛顿插值法
2021/05/11 Python
详解MySQL中的主键与事务
2021/05/27 MySQL
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript