在DedeCMS系统中,文章页字段的复制是一个常见需求,可能用于内容迁移、数据备份或模板修改等场景,要实现这一操作,需要理解DedeCMS的字段存储机制、数据库结构以及模板调用逻辑,以下是详细的操作方法和注意事项。

理解DedeCMS文章页字段结构
DedeCMS的文章数据主要存储在dede_archives(主表)和dede_addonarticle(附加表)中,
- 主表字段:如
id(文章ID)、typeid(栏目ID)、title)、pubdate(发布时间)、click(点击量)等基础信息。 - 附加表字段:如
body)、description(、keywords(关键词)、author(作者)等扩展信息,需通过addtable字段关联附加表。
在文章页模板(通常为article_article.htm)中,字段通过全局变量$arcRow或特定函数调用,
{dede:field.title/}{dede:field.body/}调用文章内容{dede:field.description function='html2text(@me)'/}调用摘要并过滤HTML
复制字段的常用方法
直接复制数据库记录
如果需要完全复制一篇文章(包括所有字段),可通过数据库操作实现:
- 步骤1:登录phpMyAdmin,进入
dede_archives表,找到目标文章记录,复制其数据(注意排除id和typeid等唯一字段)。 - 步骤2:在
dede_archives表中执行INSERT INTO语句插入新记录,确保arcrank(审核状态)、ismake(生成状态)等字段符合需求。 - 步骤3:如果文章有附加表内容,需在
dede_addonarticle表中对应插入记录,并通过aid字段与新文章的id关联。
注意事项:

- 复制前需备份数据库,避免误操作导致数据丢失。
- 唯一字段(如
id、aid)需重新生成,避免主键冲突。 - 复制后需更新缓存(后台“系统”-“一键更新缓存”)。
通过后台“内容”功能复制
DedeCMS后台支持部分字段的快速复制:
- 步骤1:进入“内容发布”-“普通文章”,找到目标文章,点击“修改”。
- 步骤2:在修改页面,点击“复制”按钮(部分版本需手动勾选“复制为新文章”)。
- 步骤3:在弹出的窗口中,选择需要复制的字段(如标题、内容、摘要等),修改标题后提交。
局限性:
- 仅支持部分字段的复制,无法自定义字段(如通过自定义模型添加的字段)。
- 复制后需手动调整关联信息(如缩略图、相关链接)。
修改模板实现字段调用
若仅需在页面中显示特定字段(如复制摘要到内容区域),可通过修改模板实现:
- 示例:在
article_article.htm中,将摘要字段插入到内容之前:{dede:field.description runphp='yes'} if(@me != '') @me = '<div class="summary">@me</div>'; {/dede:field.description} {dede:field.body/} - 自定义字段:若模型中添加了自定义字段(如
price、author),需确保:- 字段已在模型中定义(后台“核心”-“内容模型管理”)。
- 模板中通过
{dede:field.name/}调用,其中name为字段名。
使用SQL批量复制字段
若需批量复制某字段(如将所有文章的摘要复制到自定义字段),可通过SQL语句实现:

- 示例:将
description复制到custom_summary字段:UPDATE dede_addonarticle SET custom_summary = description;
- 跨表复制:若需从
dede_archives复制到dede_addonarticle,需通过id关联:UPDATE dede_addonarticle aa LEFT JOIN dede_archives a ON aa.aid = a.id SET aa.keywords = a.title;
复制字段的常见问题及解决
复制后字段内容为空
- 原因:附加表未关联或字段名错误。
- 解决:检查
dede_archives表的addtable字段是否正确指向附加表,确认模板中调用的字段名与数据库一致。
复制后格式错乱
- 原因:字段中包含特殊字符(如HTML标签、换行符)。
- 解决:使用
function函数过滤内容,{dede:field.body function='htmlspecialchars(@me)'/}
自定义字段无法复制
- 原因:自定义字段未在复制SQL或模板中指定。
- 解决:通过SQL语句单独复制自定义字段,或在后台复制时手动勾选。
相关问答FAQs
问题1:如何复制文章页的自定义字段到其他页面?
解答:若需将自定义字段(如price)从文章页复制到首页或列表页,需分两步操作:
- 在后台“内容模型管理”中确认自定义字段已勾选“使列表页支持”。
- 修改对应模板文件(如
index.htm),通过{dede:arclist titlelen='30' addfields='price'}{/dede:arclist}调用字段,其中addfields指定字段名,需在arclist标签内添加[field:price/]。
问题2:复制文章时如何保留原始发布时间和修改时间?
解答:DedeCMS默认复制文章会生成新的发布时间(当前时间),若需保留原始时间,需手动修改数据库:
- 复制文章后,在
dede_archives表中找到新记录的pubdate字段,将其值改为原文章的pubdate值。 - 若需同步修改时间,同样更新
senddate字段为原文章的senddate值。 - 完成后点击后台“一键更新生成HTML”使修改生效。
