利用“多站点”功能(推荐,最灵活)
这种方法的核心是,将中文站和英文站视为两个独立的站点,共享同一个数据库,通过在后台配置多站点,实现内容同步发布和URL的独立管理。

(图片来源网络,侵删)
核心原理
- 一个数据库,两套数据表前缀:中文站使用默认的前缀(如
dede_),英文站使用一个新的前缀(如dede_en_),所有内容表(如archives,arctype)都会有两套。 - 一个后台,两个前台:通过后台的一个发布操作,使用脚本或钩子,将数据同时写入
dede_和dede_en_两张表中。 - URL独立:可以为两个站点配置不同的域名或目录路径,
- 中文站:
www.yourdomain.com - 英文站:
en.yourdomain.com或www.yourdomain.com/en
- 中文站:
详细实施步骤
第一步:准备工作
- 备份!备份!备份! 在进行任何数据库操作前,请务必备份你的网站数据和数据库。
- 准备域名/目录:确定好你的中英文站点是使用子域名还是子目录,这里以子目录为例 (
/cn和/en)。 - 创建新的数据表前缀:登录你的phpMyAdmin,找到织梦的数据库。
- 复制所有以
dede_开头的表(内容表、模型表、会员表等)。 - 将复制出来的表重命名为
dede_en_开头。dede_archives复制为dede_en_archives,dede_arctype复制为dede_en_arctype,以此类推。
- 复制所有以
第二步:配置织梦后台
- 登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置。
- 找到 “多站点支持” 选项,选择 “是”。
- 找到 “附件保存目录” 和 “站点根目录”,确保它们是相对于网站根目录的,
uploads和 ,这样在不同站点下都能正确引用。 - 保存设置。
第三步:创建同步发布脚本(最关键的一步)
这是实现“一键同步”的核心,我们需要修改织梦的发布文件,在保存文章时,同时将数据插入到中英文两张数据表中。

(图片来源网络,侵删)
-
找到核心文件:在
/dede/目录下,找到article_add.php(发布文章) 和article_edit.php(编辑文章),你需要对这两个文件进行修改。 -
修改
article_add.php:- 在文件中找到执行数据库插入操作的核心代码段,通常在
if($typeid != 0)和//生成HTML之间。 - 在这段代码之后,复制一遍插入数据库的SQL语句。
- 将复制的SQL语句中的表名前缀从
dede_修改为dede_en_。 - 注意:你需要确保中英文文章的栏目ID(
typeid)是同步对应的,中文栏目ID为5的“产品中心”,对应的英文栏目ID应该是15,你需要在脚本中做一个映射关系。
示例代码片段(概念性,请根据你的实际代码修改):
// ... 原有代码,准备插入中文数据 $query = "INSERT INTO `dede_archives` (`typeid`, `title`, `...`) VALUES ('$typeid', '$title', '...')"; $dsql->ExecuteNoneQuery($query); $aid = $dsql->GetLastID(); // ====== 开始同步插入英文数据 ====== // 1. 获取对应的英文栏目ID (这里需要你建立一个映射关系,比如从配置文件或数据库读取) $en_typeid = getEnTypeId($typeid); // 假设你有一个函数来获取对应的英文栏目ID // 2. 处理英文标题和内容 (这里可以手动输入,也可以通过机器翻译API获取,但后者会增加复杂度) $en_title = $_POST['en_title']; // 在发布表单中增加一个英文标题输入框 $en_body = $_POST['en_body']; // 在发布表单中增加一个英文内容编辑器 // 3. 构建并执行插入英文数据的SQL $en_query = "INSERT INTO `dede_en_archives` (`typeid`, `title`, `...`) VALUES ('$en_typeid', '$en_title', '...')"; $dsql->ExecuteNoneQuery($en_query); $en_aid = $dsql->GetLastID(); // ====== 同步结束 ======- 表单修改:你还需要修改
/dede/templets/article_add.htm文件,在标题和内容编辑器旁边增加“英文标题”和“英文内容”的输入框。
- 在文件中找到执行数据库插入操作的核心代码段,通常在
-
修改
article_edit.php:逻辑类似,但需要先更新,再插入(如果英文文章不存在)或更新(如果已存在)。
(图片来源网络,侵删)
第四步:配置URL规则
- 中文站:在后台 栏目管理 -> 增加顶级栏目,创建你的中文栏目。
- 英文站:同样地,创建对应的英文栏目,确保它们的栏目目录(英文)是正确的,
products。 - URL规则设置:在后台 系统 -> 核心设置 -> 栏目默认页命名规则 和 文章命名规则 中,分别设置中英文的规则。
- 中文:
{typedir}/{aid}.html - 英文:
{typedir}/{aid}.html(规则可以一样,但生成的路径会因为栏目目录不同而不同)
- 中文:
第五步:制作语言切换
在你的网站模板(通常是 head.htm)中,添加一个语言切换的链接。
<div class="language-switcher">
<a href="/cn/">中文</a>
<a href="/en/">English</a>
</div>
优点:
- 结构清晰:中英文内容完全分离,管理方便。
- SEO友好:可以给英文站分配独立的子域名或子目录,有利于搜索引擎识别。
- 扩展性强:未来如果想增加更多语言(如日文),只需再复制一套数据表,扩展脚本即可。
缺点:
- 设置复杂:涉及数据库操作和核心文件修改,对新手不友好。
- 维护成本高:升级织梦版本时,修改过的文件可能会被覆盖,需要重新修改。
利用“同一栏目不同模型”或“自定义字段” (较简单)
这种方法不推荐用于严格的中英文同步,因为它会造成数据结构混乱,但可以作为简单多语言展示的一种折中方案。强烈不推荐,仅作了解。
核心原理
在一个栏目下,发布文章时,通过自定义字段分别存储中英文内容,标题字段 title 存中文,再增加一个自定义字段 en_title 存英文;内容字段 body 存中文,再增加 en_body 存英文。
实施步骤
- 创建模型:在后台 内容模型管理 -> 模型,创建一个“多语言文章”模型。
- 添加字段:在这个模型下,添加自定义字段,如
en_title(文本类型),en_body(编辑器类型)。 - 发布文章:发布文章时,同时填写中文和英文的内容。
- 前端调用:在前端模板中,通过判断语言变量来决定调用哪个字段的内容。
缺点:
- 内容混杂:一个数据表里存了多种语言,不易管理和维护。
- URL不友好:无法生成
/cn/xxx.html和/en/xxx.html这样的独立URL,所有内容都在同一个路径下。 - 对SEO不友好:搜索引擎很难判断哪个是主要语言,哪个是次要语言。
- 同步发布困难:无法实现真正的“一键同步”,因为每个字段都需要手动填写。
使用第三方多语言插件 (最省心)
织梦社区有一些开发者制作了多语言插件,它们封装了上述方案一的复杂逻辑,提供可视化的后台操作。
实施步骤
- 寻找插件:在织梦官方论坛、DedeCMS吧等地方搜索“织梦 多语言插件”、“织梦 英文站”等关键词。
- 下载安装:按照插件的说明文档进行安装和配置,通常插件会帮你完成数据表创建、后台配置和发布逻辑的修改。
- 配置和使用:在插件提供的后台界面中,配置中英文栏目对应关系,然后像正常发布文章一样,插件会自动处理同步。
优点:
- 使用简单:可视化操作,无需修改代码。
- 功能稳定:成熟的插件已经考虑了各种边界情况。
缺点:
- 可能需要付费:功能完善的插件通常是商业产品。
- 依赖第三方:网站稳定性依赖于插件的开发者,如果插件停止更新或与新版织梦不兼容,会很麻烦。
- 安全性:需要从第三方下载安装文件,存在一定的安全风险。
总结与建议
| 方案 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 多站点 | 结构清晰、SEO友好、扩展性强 | 设置复杂、维护成本高 | ⭐⭐⭐⭐⭐ (对于有技术能力的团队是最佳选择) |
| 自定义字段 | 设置简单,无需修改核心文件 | 数据混乱、URL不友好、对SEO不利 | ⭐ (仅作非常简单的展示,不推荐正式使用) |
| 第三方插件 | 使用简单、功能稳定 | 可能付费、依赖第三方、有安全风险 | ⭐⭐⭐⭐ (对于不想写代码,且愿意投入预算的用户是最佳选择) |
给你的最终建议:
- 如果你或你的团队有PHP和织梦二次开发能力,强烈推荐你采用方案一,虽然前期投入时间较多,但从长远来看,这是最规范、最灵活、最能保证网站性能和SEO效果的方案。
- 如果你完全不想碰代码,且预算允许,可以去寻找一个可靠的第三方插件(方案三),这能大大节省你的时间和精力。
- 请尽量避免方案二,除非你的网站只是一个极其简单的内部展示页面,且对SEO和URL没有要求。
无论选择哪种方案,请务必备份好你的数据和网站文件,谨慎操作。
