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处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
PHP中strtotime函数使用方法分享
Jan 10 PHP
php抓取页面的几种方法详解
Jun 17 PHP
解析php5配置使用pdo
Jul 03 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
19个Android常用工具类汇总
Dec 30 PHP
解决php表单重复提交实现方法
Sep 29 PHP
php 获取文件行数的方法总结
Oct 11 PHP
简述php环境搭建与配置
Dec 05 PHP
php curl上传、下载、https登陆实现代码
Jul 23 PHP
php源码的安装方法和实例
Sep 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
解析isset与is_null的区别
2013/08/09 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
PDO::commit讲解
2019/01/27 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
Jquery AJAX 用于计算点击率(统计)
2010/06/30 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
手机端实现Bootstrap简单图片轮播效果
2016/10/13 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
Python assert关键字原理及实例解析
2019/12/13 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
查环查孕证明
2014/01/10 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
小学毕业演讲稿
2014/04/25 职场文书
党支部三会一课计划
2014/09/24 职场文书
高中生逃课检讨书
2014/10/10 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
获奖感言一句话
2015/07/31 职场文书
优质护理服务心得体会
2016/01/22 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Nginx实现会话保持的两种方式
2022/03/18 Servers