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

一、判断手机端和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端的实现方式
 

Guess you like

Origin blog.csdn.net/amberom/article/details/121306985