织梦CMS本身是一款非常经典和灵活的PHP内容管理系统,其强大的标签系统和模板机制使其非常适合进行二次开发,在移动互联网时代,为织梦开发手机网站(或称移动端网站、响应式网站)是一个非常常见的需求。

(图片来源网络,侵删)
下面我将从核心思路、开发步骤、关键技术点、代码示例和注意事项五个方面,为你提供一份详尽的指南。
核心思路:三种主流方案
在织梦中开发手机网站,主要有以下三种思路,各有优劣,你可以根据项目需求选择。
PC站与手机站完全分离(最推荐)
这是目前最主流、最规范、最灵活的方案。
-
工作原理:
(图片来源网络,侵删)- 域名判断:通过PHP代码判断用户访问的设备类型(PC或手机)。
- 自动跳转:如果用户用手机访问PC站域名,则自动跳转到专门为手机准备的子域名(如
m.yoursite.com)或目录(如yoursite.com/m/)。 - 独立站点:手机站和PC站是两套完全独立的模板和数据(可以共用数据库,但表结构最好独立)。
-
优点:
- 极致优化:可以针对手机屏幕和操作习惯进行完全独立的UI/UX设计,体验最好。
- 代码清晰:两套代码分离,互不干扰,便于维护和升级。
- SEO友好:可以为移动端设置独立的
sitemap和robots.txt,更好地服务移动搜索。
-
缺点:
- 开发量稍大:需要设计和开发两套模板。
- 内容同步:需要一套机制来同步PC站和手机站的内容(见下文“内容同步”部分)。
响应式设计
-
工作原理:
- 使用一套模板,通过CSS媒体查询(
@media)来适配不同尺寸的屏幕,PC、平板、手机都访问同一个域名和同一套模板。
- 使用一套模板,通过CSS媒体查询(
-
优点:
(图片来源网络,侵删)- 开发量小:只需维护一套模板。
- 内容统一同步,PC和手机看到的内容完全一致。
-
缺点:
- 性能可能不佳:为了兼容所有设备,可能会加载一些PC端不需要的CSS和JS资源,影响手机加载速度。
- 体验妥协:很难针对手机触屏操作进行深度优化(如手势、更简洁的导航等)。
- 代码维护复杂:CSS代码量会变得很大,媒体查询的嵌套和优先级管理较复杂。
PC模板与手机模板共存,通过URL参数切换
-
工作原理:
- 在PC站的模板中,通过一个变量(如
?mobile=yes)来切换调用手机模板还是PC模板。 - 访问
yoursite.com/index.php?mobile=yes时,系统会加载手机端的首页模板。
- 在PC站的模板中,通过一个变量(如
-
优点:
- 实现简单:改动最小,不需要额外的域名或子目录。
-
缺点:
- 用户体验差:URL不美观,且用户无法主动切换。
- SEO困难:搜索引擎难以判断哪个是移动版URL。
- 技术过时:这是早期的解决方案,现在已不推荐使用。
对于绝大多数商业项目,强烈推荐【方案一:完全分离】。 下面我们将重点围绕方案一展开。
开发步骤(以方案一为例)
步骤 1:环境准备
- 本地开发环境:安装集成环境包,如
phpStudy、XAMPP或Docker。 - 织梦程序:下载最新稳定版的织梦CMS。
- 代码编辑器:推荐使用
VS Code、Sublime Text或PhpStorm。 - FTP/SFTP工具:用于上传文件到服务器,如
FileZilla。
步骤 2:创建手机站目录和模板
- 创建目录:在织梦根目录下创建一个新文件夹,
m/。 - 复制核心文件:将
dede/(后台目录)、include/、plus/等核心功能目录复制到m/目录下,这些是手机站运行所必需的。 - 复制并修改配置文件:
- 复制
data/common.inc.php到m/data/目录下。 - 关键修改:打开
m/data/common.inc.php,修改数据库连接信息,确保它指向同一个数据库(如果数据共用),修改cfg_cmspath为/m,表示手机站的程序路径。
- 复制
- 创建手机模板:
- 在
templets/目录下创建一个新的文件夹,default_m/。 - 在
default_m/中,仿照PC端模板的结构,创建手机端所需的模板文件,如index.htm(首页),list_article.htm(列表页),article_article.htm(文章页) 等,这些模板的HTML和CSS需要针对手机进行优化。
- 在
步骤 3:实现设备自动跳转(核心代码)
这是实现PC和手机站分离的关键,在PC站模板的 <head> 标签内加入以下PHP代码。
<?php
if (isset($_GET['mobile'])) {
$mobile = $_GET['mobile'];
} else {
$mobile = '';
}
if ($mobile != 'no' && strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Windows Phone') !== false) {
// 如果是手机访问,且没有禁止跳转,则跳转到手机站
header("Location: /m/");
exit;
}
?>
代码解释:
- 这段代码首先检查URL参数
?mobile=no,如果存在,则不进行跳转,方便PC端用户强制查看PC版。 - 它通过检查
HTTP_USER_AGENT(用户代理字符串)来判断是否为移动设备。 - 如果判断为移动设备,则使用
header()函数进行302跳转到手机站目录/m/。
将这段代码放入PC站所有模板的 <head> 中,或者更高效地,放入 head.htm 公共头部模板中。
步骤 4:手机站模板制作
这是二次开发的“前端”部分。
- HTML结构:使用更简洁的HTML5标签,布局要清晰,减少层级。
- CSS样式:
- 移动优先:先写手机样式,再通过媒体查询逐步增加PC端的复杂样式。
- 使用REM/EM/VW:推荐使用REM作为单位,结合
viewport设置,可以实现完美的等比缩放。 - 重置默认样式:引入一个移动端CSS重置文件,如
normalize.css或reset.css,以解决不同浏览器的默认样式差异。
- JavaScript交互:
- 使用
zepto.js或touch.js等轻量级移动端库来处理触摸事件(如滑动、点击),而不是笨重的jQuery。 - 实现下拉刷新、上拉加载更多等移动端常见交互。
- 使用
- Viewport设置:在手机站模板的
<head>中加入:<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
width=device-width:宽度为设备宽度。initial-scale=1.0:初始缩放比例为1。maximum-scale=1.0:最大缩放比例为1,禁止用户手动放大。user-scalable=0:禁止用户缩放。
步骤 5:内容同步机制(难点)
PC站和手机站内容如何同步?有三种常用方法:
- 手动复制:最简单,但效率低,容易出错,不推荐。
- 定时任务脚本:推荐。
- 原理:编写一个PHP脚本(如
sync_content.php),通过织梦的API(require_once(DEDEINC.'/arc.partview.class.php');)来获取PC站最新/热门的文章ID,然后调用手机站的后台接口(或直接操作数据库)将这些文章同步到手机站。 - 实现:将此脚本设置为服务器端的定时任务(Cron Job),例如每30分钟执行一次,自动同步内容。
- 原理:编写一个PHP脚本(如
- 共用数据表 + 模板判断:
- 原理:PC和手机站共用同一套数据表,在模板中,通过PHP判断当前是PC还是手机模板,然后调用不同的织梦标签来展示内容。
- 实现:在模板中,可以定义一个变量
$isMobile,在公共文件中根据设备类型赋值,模板里就可以这样写:{if $isMobile} {dede:arclist titlelen='30' row='5'} <!-- 手机端调用5条短标题 --> <a href="[field:arcurl/]">[field:title/]</a> {/dede:arclist} {else} {dede:arclist titlelen='60' row='10'} <!-- PC端调用10条长标题 --> <a href="[field:arcurl/]">[field:title/]</a> {/dede:arclist} {/if} - 优缺点:实现简单,但灵活性差,无法针对不同平台定制内容(比如手机端显示图文,PC端显示纯列表),且对数据库查询压力较大。
步骤 6:后台整合与开发
- 统一登录:为了让用户能在同一个后台管理PC和手机站,可以修改手机站的后台登录地址和验证逻辑,使其指向PC站的后台,但这有一定风险,建议保持两个独立后台,但通过UI提示它们是关联的。
- 自定义功能开发:如果手机站有PC站没有的功能(如会员积分兑换、活动报名等),就需要在手机站目录下进行二次开发。
- 新建模型:在手机站后台,可以创建新的内容模型,用于存放手机端特有的内容。
- 开发插件:根据需求,开发自定义的插件或模块,并放在
/m/include/或/m/dede/目录下。 - API接口:如果需要开发App,可以将手机站作为数据源,开发一套JSON API接口供App调用。
关键技术点与织梦标签应用
-
获取当前栏目信息:
{dede:field name='title'/} // 栏目标题 {dede:field name='description' function='html2text(@me)'/} // 栏目描述 -
调用文章列表(手机端常用):
{dede:arclist flag='c' typeid='栏目ID' titlelen='20' row='5' orderby='pubdate'} <li> <a href="[field:arcurl/]"> <img src="[field:litpic/]" alt="[field:title/]"> <h3>[field:title/]</h3> <p>[field:description function='cn_substr(@me, 60)'/]...</p> </a> </li> {/dede:arclist}flag='c':推荐属性。titlelen='20'长度为20个字符。row='5':显示5条。
-
分页标签:
{dede:pagelist listsize='4' listitem='info,index,next,end,pre,pageno'/} -
调用友情链接:
{dede:flink type='text' row='6'/}
注意事项
- 性能优化:手机网站速度至关重要。
- 图片压缩:所有上传到手机站的图片都必须经过压缩,可以使用插件或在上传时通过PHP处理。
- 启用CDN:将静态资源(CSS, JS, 图片)放到CDN上,加速全球访问。
- 减少HTTP请求:合并CSS和JS文件,使用CSS Sprites。
- SEO优化:
<title>和<meta>:每个页面都要有独特的、包含关键词的title和description。- URL规范化:确保只有一个版本的URL(PC或移动版)被搜索引擎收录。
- 结构化数据:添加
Article、BreadcrumbList等结构化数据,有助于搜索引擎理解页面内容,提升搜索结果展示效果。
- 安全性:
- 后台安全:修改手机站默认的后台目录名(
/m/dede/)和默认管理员账号密码。 - 权限控制:对上传目录等关键目录设置严格的写入权限。
- 更新补丁:及时关注织梦官方的安全更新并应用到手机站。
- 后台安全:修改手机站默认的后台目录名(
- 测试:
- 真机测试:一定要在真实的手机上进行测试,包括iOS和Android系统,以及不同品牌、不同分辨率的手机。
- 浏览器模拟器:使用Chrome DevTools等工具进行初步调试。
- 网络测试:在2G/3G/4G和不同Wi-Fi环境下测试网站的加载速度和稳定性。
通过以上步骤和注意事项,你就可以成功地为织梦CMS进行二次开发,打造出一个体验良好、功能完善的手机网站,这是一个系统性的工程,需要前端、后端甚至SEO的协同配合,祝你开发顺利!
