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多文件上传实现代码
Feb 20 PHP
php获取网页请求状态程序示例
Jun 17 PHP
CentOS安装php v8js教程
Feb 26 PHP
php实现发送微信模板消息的方法
Mar 07 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
php如何连接sql server
Oct 16 PHP
PHP记录和读取JSON格式日志文件
Jul 07 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
Oct 22 PHP
php 常用的系统函数
Feb 07 PHP
PHP构造二叉树算法示例
Jun 21 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
Laravel 实现数据软删除功能
Aug 21 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
coreseek 搜索英文的问题详解
2013/06/08 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
js+html制作简单验证码
2017/02/16 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
javascript实现下拉菜单效果
2021/02/09 Javascript
Python中asyncore的用法实例
2014/09/29 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
python编程使用协程并发的优缺点
2018/09/20 Python
django使用admin站点上传图片的实例
2019/07/28 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
centos7之Python3.74安装教程
2019/08/15 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
运动会通讯稿150字
2014/02/15 职场文书
开场白怎么写
2015/06/01 职场文书
pandas数值排序的实现实例
2021/07/25 Python
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
python解析json数据
2022/04/29 Python