TP5.1中判断手机端和PC端

3 篇文章 0 订阅

一、判断手机端和PC端

1. 使用自定义方法

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. 使用TP5自带的Request->isMobile()方法(推荐)

if(\think\facade\Request::isMobile()) 
{
    return true;
}

额外话题:加载页面的方式

1. 手机端和PC端页面路径相同,动态判断加载不同的模板

适用于手机端和PC端页面功能、数据基本一样的站点。

(1)应用路径的view目录下分别建mobile和pc子目录,用于存放手机端和PC的模板文件,两个端的文件结构要完全一致。若pc端下有index.html则mobile端下同样要有index.html

(2)在应用公共文件(application/common.php)中插入判定设备端加载模板路径的常量 VIEW_PATH

注:这里固定了是加载 application/index 模块,不是太灵活。

// 应用公共文件

if (\think\facade\Request::isMobile())
{
    define('VIEW_PATH', __DIR__ . '/index/view/mobile/');
}
else
{
    define('VIEW_PATH', __DIR__ . '/index/view/pc/');
}

(3)在模板配置文件(config/template.php)中配置“模板路径”

(4)运行结果

2.手机端和PC端页面路径不同,或是前后端分离,前端页面单独管理

适用于手机端和PC端页面功能不一样,分两个模块单独处理。直接在首页的controller加判断,跳转不同的模块入口页面。

参考资料

tp5框架判断手机端与pc端

TP5判断手机端和PC端

TP5中手机端和PC端的实现方式

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值