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

(图片来源网络,侵删)
实现步骤:
-
创建模板文件 在你的模板目录(通常是
/templets/你的模板名/)下,分别创建 PC 模板和手机模板。- PC 模板:
index_pc.htm - 手机模板:
index_mobile.htm
- PC 模板:
-
修改 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() 类似,但需要自己维护关键词列表。

(图片来源网络,侵删)
实现步骤:
同样是修改 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>
为什么不推荐?

(图片来源网络,侵删)
- 依赖 JS:如果用户禁用了 JavaScript,这个判断就完全失效了,会导致 PC 用户看到手机版页面,或者反之。
- 对 SEO 不友好:搜索引擎爬虫(如 Googlebot, Baiduspider)在抓取页面时,通常会禁用 JavaScript,它们可能会始终看到 PC 版本,导致手机版内容无法被索引。
- 加载延迟:页面需要先加载 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';。
