核心思想
实现同步的核心思路是:“一次发布,多端显示”在PC端的后台发布或编辑后,通过某种机制,自动将内容处理并同步到手机站的对应栏目或数据库中,从而避免在两个后台重复操作。

目前主流且高效的同步方案主要有以下三种:
- 数据库同步方案 (最推荐、最稳定)
- API数据调用方案 (最灵活、现代化)
- 静态文件方案 (传统、但效率低)
下面我将重点讲解第一种方案,因为它最稳定、兼容性最好,也是目前绝大多数DedeCMS用户采用的方式。
数据库同步方案 (核心推荐)
这种方案的核心是:让PC站和手机站共享同一套数据库,通过修改或调用程序,确保在PC端发布内容时,能同时将内容写入手机站所需的表中或特定字段中。
前提条件
- 已安装PC站和手机站:确保你的PC站和手机站都已经安装完成,并且可以独立运行。
- 手机站使用了PC站的数据:手机站不是完全独立的,而是通过某种方式(如
{dede:arclist}标签)调用了PC站数据库中的内容,通常手机站模板会做一些适配(如响应式设计或简化样式)。 - 了解基本数据库操作:需要知道如何登录phpMyAdmin等数据库管理工具。
详细操作步骤
第1步:分析数据表结构
这是最关键的一步,我们需要了解PC站和手机站分别使用哪些数据表来存储文章内容。

- PC站核心文章表:
dede_archives(文章主表,存储ID、标题、发布时间等) - PC站文章附加表:
dede_addonarticle(文章附加表,存储文章内容、关键字等) - 手机站核心文章表:
dede_archives(通常与PC站共用) - 手机站文章附加表:
dede_addonarticle(通常与PC站共用)
在默认情况下,PC站和手机站如果使用同一套程序,它们本来就共享数据表,所谓的“同步”,更多的是指确保手机站的模板能正确调用和显示这些数据,以及处理一些特殊情况(如手机站专属内容)。
第2步:修改发布程序,实现自动同步
我们需要修改PC站后台的内容发布程序,让它在保存文章时,自动将文章内容也“复制”到手机站需要的地方。
-
定位核心文件:
- PC站后台发布文章的文件通常位于:
/dede/article_add.php(发布新文章) - PC站后台编辑文章的文件通常位于:
/dede/article_edit.php(编辑文章)
- PC站后台发布文章的文件通常位于:
-
理解逻辑:
(图片来源网络,侵删)- 当你在后台发布一篇文章时,
article_add.php会执行一系列操作,将文章信息插入到dede_archives表,将文章内容插入到dede_addonarticle表。 - 我们要做的,就是在这些操作成功之后,再执行一次类似的插入操作,但这次是插入到手机站专用的字段或表中。
- 当你在后台发布一篇文章时,
-
具体实现(以添加文章为例):
打开
/dede/article_add.php文件,找到文章成功保存后,跳转页面的代码段(通常在文件的最后部分,类似ShowMsg("成功发布新文章", "article_list.php");的地方)。在这行代码之前,添加以下PHP代码:
// ======================================== // 开始:手机站内容同步代码 // ======================================== // 1. 获取刚插入的文章ID $arcID = $dsql->GetLastID(); // 2. 获取刚插入的文章数据 $query = "SELECT * FROM `#@__archives` WHERE id = $arcID"; $row = $dsql->GetOne($query); $title = $row['title']; $typeid = $row['typeid']; $pubdate = $row['pubdate']; $senddate = $row['senddate']; $mid = $row['mid']; $description = $row['description']; $keywords = $row['keywords']; $arcrank = $row['arcrank']; $click = $row['click']; $ismake = $row['ismake']; $filename = $row['filename']; // 3. 获取文章内容 $addQuery = "SELECT * FROM `#@__addonarticle` WHERE aid = $arcID"; $addRow = $dsql->GetOne($addQuery); $body = $addRow['body']; // 文章正文内容 // 4. 准备插入手机站数据 (这里假设手机站也使用addonarticle表,但我们可以给它一个标识) // 如果你手机站有独立的表,dede_mobile_addonarticle,那么就直接操作那个表 // 这里我们演示一个更常见的场景:将内容写入同一个附加表,但通过一个字段来区分 // 在 dede_addonarticle 表中增加一个 `mobile_body` 字段来存储手机站专用的内容(可选) // 最简单的同步:直接把PC内容复制给手机站 // 如果手机站和PC站使用完全相同的模板和逻辑,那么什么都不用做,数据已经共享了! // 但如果你的手机站需要特殊处理,比如调用不同的字段,你可以在这里进行修改。 // 示例:如果手机站需要的内容是PC内容的一部分,你可以在这里截取或处理 // $mobile_body = cn_substr($body, 500); // 只取前500字作为手机站摘要 // 5. 将处理后的内容写入手机站的数据表 // 假设手机站也使用 dede_addonarticle 表,那么它已经有数据了。 // 如果你有特殊需求,比如写入另一个表,可以执行以下代码: /* $inquery = "INSERT INTO `#@__mobile_addonarticle` (aid, typeid, body, userip, `time`, goodpost, badpost, voteid) VALUES ('$arcID', '$typeid', '$body', '{$cfg_cli_ip}', '$senddate', '0', '0', '0'); "; $dsql->ExecuteNoneQuery($inquery); */ // ======================================== // 结束:手机站内容同步代码 // ========================================代码解释:
$dsql->GetLastID(): 获取刚刚插入记录的ID,这是实现同步的关键。- 我们通过这个新ID,从
archives和addonarticle表中把刚保存的文章信息重新查询出来。 - 你可以根据需要对这些数据进行处理(为手机站生成不同的摘要、不同的标题等)。
- 将这些处理后的数据插入到手机站对应的表中,如果手机站和PC站完全共用数据,那么这部分代码可以省略,或者只做一些标记性的处理。
-
编辑文章的同步:
- 编辑文章的逻辑与发布类似,你需要打开
/dede/article_edit.php。 - 找到文章更新成功的位置(类似
ShowMsg("成功更新文档", "article_edit.php?aid=$aid");)。 - 在此之前,添加类似的代码,但这次是执行
UPDATE操作而不是INSERT,来更新手机站的数据。
- 编辑文章的逻辑与发布类似,你需要打开
第3步:处理栏目同步
文章同步了,栏目也需要同步。
- 栏目共用:最简单的方式是让手机站和PC站共用一套栏目,在后台添加栏目时,直接在PC站后台添加即可,手机站会自动拥有这些栏目。
- 栏目独立:如果手机站和PC站的栏目结构不同(PC站有“公司新闻”、“产品中心”,手机站只有“新闻”、“产品”),你需要手动维护两个栏目的对应关系,或者在发布文章时,通过程序选择对应的手机站栏目,这通常更复杂,需要修改发布程序中的栏目选择逻辑。
第4步:处理图片和资源路径
这是一个常见的坑,PC站和手机站可能在不同的目录下(如 /pc/ 和 /m/),或者使用不同的域名。
- 问题中的图片路径是绝对路径,如
http://www.yoursite.com/uploads/image.jpg,当手机站使用m.yoursite.com域名访问时,图片路径依然正确,没问题。 - 问题:如果手机站存放在
/m/子目录下,图片路径可能需要变成/m/uploads/image.jpg,这时,就需要对文章内容中的路径进行替换。
解决方案:在同步文章内容时,对 $body 进行处理。
在上述第2步的代码中,在获取 $body 之后,插入以下代码:
// ======================================== // 开始:图片路径替换代码 // ======================================== // 场景:PC站根目录是 /,手机站是 /m/ // 将 /uploads/ 替换为 /m/uploads/ // 注意:这里的路径要根据你的实际情况修改 $pc_path = "/uploads/"; $mobile_path = "/m/uploads/"; $body = str_replace($pc_path, $mobile_path, $body); // ======================================== // 结束:图片路径替换代码 // ========================================
更高级的方案:使用DedeCMS的 {dede:field name='body' function='str_replace("旧路径","新路径",@me)'/} 在手机站模板中直接进行替换,这样更灵活,不需要修改程序。
第5步:设置URL统一(非常重要)
为了SEO和用户体验,PC站和手机站应该能互相跳转,并且URL最好能统一。
-
移动端适配:在PC站的模板头部(
<head>标签内)加入以下代码,告诉搜索引擎你的手机站地址。<link rel="alternate" media="only screen and (max-width: 640px)" href="http://m.yoursite.com/你的文章URL" > <link rel="canonical" href="http://www.yoursite.com/你的文章URL" />
rel="alternate":告知PC版页面对应的移动版页面。rel="canonical":告知搜索引擎哪个是主版本(PC版),避免内容重复。
-
自动跳转:可以在PC站首页或全局模板中加入JS,检测访问设备,如果是手机则自动跳转到手机站。
<script> (function(){ var url = window.location.href; if(navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|Symbian|Windows Phone|Phone)/i)){ window.location.href = 'http://m.yoursite.com' + url.split('/').slice(3).join('/'); } })(); </script>
API数据调用方案 (现代化方案)
这种方案下,PC站和手机站可以是完全独立的两套系统,甚至可以放在不同的服务器上。
-
原理:
- 在PC站开发一个API接口(
/api/get_article.php?id=123)。 - 这个接口负责根据文章ID,从数据库中查询文章信息,并将其转换成JSON或XML格式返回。
- 手机站不再直接查询数据库,而是通过AJAX或服务器端请求(PHP的file_get_contents或cURL)来调用PC站的API接口,获取数据并展示。
- 在PC站开发一个API接口(
-
优点:
- 完全解耦,手机站可以独立部署和升级。
- 非常灵活,可以控制返回的数据格式和内容,方便手机端进行优化。
- 适合开发App或小程序时作为数据源。
-
缺点:
- 开发复杂度较高,需要懂API开发。
- 增加了服务器请求,对性能有一定影响。
- 需要处理API接口的安全认证(如Token),防止数据被恶意调用。
静态文件方案 (传统方案)
这种方案通过定时任务(如Linux的Crontab),定期将PC站生成的静态HTML文件,经过处理后复制到手机站的目录下。
-
原理:
- PC站开启静态化,生成
.html文件。 - 编写一个脚本,该脚本能遍历PC站的
html/目录,找到所有HTML文件。 - 对每个HTML文件进行处理(如修改CSS/JS路径、移除PC端不需要的模块、简化内容等)。
- 将处理后的文件复制到手机站的
html/目录。
- PC站开启静态化,生成
-
优点:
手机站访问速度快,因为是纯静态文件。
-
缺点:
- 非实时:同步有延迟,不适合即时性要求高的内容。
- 处理复杂:处理HTML文件非常麻烦,容易出错,特别是对于复杂的页面结构。
- 灵活性差:难以实现个性化内容推荐等复杂功能。
此方案已非常不推荐,除非有特殊的历史遗留问题需要处理。
总结与建议
| 方案 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 数据库同步 | 稳定、实时、开发量小、兼容性好 | 需要基本数据库和PHP知识,修改核心文件有风险 | ⭐⭐⭐⭐⭐ (强烈推荐) |
| API数据调用 | 灵活、解耦、现代化 | 开发复杂度高,有性能和安全开销 | ⭐⭐⭐⭐ (适合新项目或复杂场景) |
| 静态文件同步 | 手机站访问快 | 非实时、处理复杂、灵活性差 | ⭐ (不推荐) |
给你的最终建议:
- 首选“数据库同步方案”,这是最经典、最可靠的DedeCMS同步方法。
- 操作前务必备份:在修改
article_add.php等核心文件前,请务必备份原文件和你的数据库。 - 从简单开始:如果你的手机站只是PC站的简化版,并且使用了相同的栏目和数据表,那么你可能只需要确保URL统一和图片路径正确即可,甚至不需要修改发布程序。
- 测试:完成修改后,务必多次测试发布、编辑、删除文章等操作,确保同步逻辑没有问题,且没有破坏原有功能。
希望这份详细的指南能帮助你成功实现DedeCMS手机站与PC站的同步!
