如何判断DEDE当前是手机模板还是PC模板?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 DEDE建站 正文

使用 DedeCMS 内置函数 is_mobile() (最推荐)

这是 DedeCMS 5.7 及以上版本内置的官方函数,专门用于判断移动设备,它不仅检查了 HTTP_USER_AGENT,还考虑了更复杂的场景,是最可靠、最标准的方式。

dede 判断是手机模版 还是pc模版
(图片来源网络,侵删)

实现步骤:

  1. 创建模板文件 在你的模板目录(通常是 /templets/你的模板名/)下,分别创建 PC 模板和手机模板。

    • PC 模板:index_pc.htm
    • 手机模板:index_mobile.htm
  2. 修改 PHP 文件 (通常是 index.php) 打开你的首页 PHP 文件(/index.php),找到 require_once(DEDEROOT.'/include/dedetemplate.class.php'); 这行代码,在其之前加入以下判断逻辑:

    <?php
    // 引入 common.inc.php 文件,确保 is_mobile() 函数可用
    // 通常这个文件在 index.php 的最顶部已经引入了,但为了保险,可以检查一下
    require_once (dirname(__FILE__) . "/include/common.inc.php");
    // --- 核心判断逻辑 ---
    if (is_mobile()) {
        // 如果是手机访问,则设置手机模板变量
        $tpl = 'index_mobile.htm';
    } else {
        // 如果是 PC 访问,则设置 PC 模板变量
        $tpl = 'index_pc.htm';
    }
    // --- 逻辑结束 ---
    // 然后使用这个变量来加载模板
    require_once(DEDEROOT.'/include/dedetemplate.class.php');
    $dtp = new DedeTemplate();
    $dtp->LoadTemplate(TemplatePath.'/'.$tpl);
    $dtp->Display();
    ?>

代码解释:

  • is_mobile(): 这个函数会检查 $_SERVER['HTTP_USER_AGENT'],判断其中是否包含常见的移动设备关键词(如 'Mobile', 'Android', 'iPhone' 等)。
  • $tpl = '...';: 根据判断结果,将模板文件名赋值给 $tpl 变量。
  • TemplatePath.'/'.$tpl: 在 dedetemplate.class.php 中,TemplatePath 变量已经定义了当前模板的路径,我们通过拼接变量来动态指定要加载的模板文件。

手动检查 HTTP_USER_AGENT (兼容性好,但不推荐)

如果你的 DedeCMS 版本非常旧,或者 is_mobile() 函数不可用,你可以手动实现判断逻辑,这种方法原理和 is_mobile() 类似,但需要自己维护关键词列表。

dede 判断是手机模版 还是pc模版
(图片来源网络,侵删)

实现步骤:

同样是修改 index.php 文件,逻辑如下:

<?php
require_once (dirname(__FILE__) . "/include/common.inc.php");
// --- 手动判断逻辑 ---
$mobile_agent_array = array(
    'iphone', 'android', 'ipod', 'ipad', 'windows phone', 'blackberry', 'webos', 'opera mobi', 'opera mini', 'iemobile'
);
$is_mobile = false;
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
foreach ($mobile_agent_array as $device) {
    if (strpos($user_agent, $device) !== false) {
        $is_mobile = true;
        break; // 找到一个匹配即可跳出循环
    }
}
if ($is_mobile) {
    $tpl = 'index_mobile.htm';
} else {
    $tpl = 'index_pc.htm';
}
// --- 逻辑结束 ---
require_once(DEDEROOT.'/include/dedetemplate.class.php');
$dtp = new DedeTemplate();
$dtp->LoadTemplate(TemplatePath.'/'.$tpl);
$dtp->Display();
?>

为什么不推荐此方法?

  • 维护成本高:需要手动维护移动设备关键词列表,随着新设备的出现,需要不断更新。
  • 不够智能:无法识别一些新型的或小众的移动设备。
  • 可能误判:简单的字符串匹配可能会产生误判(PC 浏览器的 User-Agent 中也可能包含 "mobile" 字符串)。

使用 JavaScript 判断 (不推荐,仅作了解)

也可以使用 JavaScript 在客户端进行判断,然后跳转到不同的页面,但这种方法有几个致命缺点,非常不推荐用于模板切换。

<script>
// 检测是否为移动设备
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
    // 如果是移动设备,跳转到手机版页面
    window.location.href = "/m/index.php"; // 假设手机版在 /m/ 目录下
} else {
    // 如果是PC,就留在当前页面
    // 或者不做任何事
}
</script>

为什么不推荐?

dede 判断是手机模版 还是pc模版
(图片来源网络,侵删)
  1. 依赖 JS:如果用户禁用了 JavaScript,这个判断就完全失效了,会导致 PC 用户看到手机版页面,或者反之。
  2. 对 SEO 不友好:搜索引擎爬虫(如 Googlebot, Baiduspider)在抓取页面时,通常会禁用 JavaScript,它们可能会始终看到 PC 版本,导致手机版内容无法被索引。
  3. 加载延迟:页面需要先加载 JS 并执行后才会跳转,用户体验不佳。

方法 优点 缺点 推荐度
is_mobile() 函数 官方支持、最可靠、代码简洁、考虑周全 依赖较新的 DedeCMS 版本 (5.7+) ⭐⭐⭐⭐⭐ (强烈推荐)
手动检查 USER_AGENT 兼容所有版本,不受 DedeCMS 版本限制 代码冗长,需要手动维护,可能不精确 ⭐⭐
JavaScript 判断 客户端判断,减轻服务器负担 严重依赖 JS,对 SEO 不友好,用户体验差 ⭐ (不推荐)

优先使用方法一 (is_mobile() 函数),这是 DedeCMS 官方提供的解决方案,最稳定、最规范,也是未来发展的方向。

补充提示:

  • 移动端域名:很多网站会为移动端设置一个独立的域名(如 m.yoursite.com),这种情况下,判断逻辑会更简单,因为域名本身就区分了设备类型,DedeCMS 也支持这种模式,你只需要在后台设置好移动域名即可。
  • 模板路径:如果你的手机模板放在了 /templets/你的模板名/m/ 这样的子目录下,那么模板变量可以设置为 $tpl = 'm/index_mobile.htm';
-- 展开阅读全文 --
头像
dede自定义表单后台数字联动如何实现?
« 上一篇 12-04
C语言for循环中continue会跳过本次循环还是终止循环?
下一篇 » 12-04

相关文章

取消
微信二维码
支付宝二维码

目录[+]