这个文件是DedeCMS后台内容发布流程中的一个执行枢纽,它的主要作用是接收并处理从前台内容发布表单(如 article_add.php)提交过来的数据,然后调用相应的函数来完成文章的最终入库、更新、删除等操作。

(图片来源网络,侵删)
archives_do.php 是“做事”的文件,而像 article_add.php 这样的文件是“准备界面和收集数据”的文件。
文件位置
通常位于织梦CMS后台的根目录下:
/dede/archives_do.php
主要功能
archives_do.php 通过一个名为 dopost 的POST参数来判断用户要执行的具体操作,根据 dopost 的不同值,它会执行不同的逻辑。
常见的 dopost 值及其对应的功能:

(图片来源网络,侵删)
dopost 值 |
功能描述 | 涉及的主要函数 |
|---|---|---|
save |
保存新文章 | InsertArticle() |
edit |
更新已存在的文章 | UpDateArt() |
delete |
删除文章 | DelArc() |
pub |
发布文章(从草稿状态转为已发布) | MakeArchives() |
check |
审核文章 | CheckArchives() |
saveset |
保存文章设置(如栏目属性等) | SaveArticleSet() |
move |
移动文章到其他栏目 | MoveArc() |
copy |
复制文章到其他栏目 | CopyArc() |
addto |
添加到自定义列表 | AddArcToCustom() |
核心工作流程
无论执行哪种操作,archives_do.php 的工作流程都遵循一个基本模式:
-
安全检查与初始化
- 检查登录状态:首先会检查用户是否已登录,如果未登录则直接拒绝操作。
- 引入核心文件:引入
config.php、dedesql.class.php(数据库操作类)、inc_archives_functions.php(文章处理函数库)等核心文件。 - 获取操作类型:从
$_POST或$_GET中获取dopost参数,确定要执行的动作。
-
接收并处理表单数据
- 接收从发布页面提交过来的所有数据,包括:
typeid: 栏目IDtitle: 文章标题body: 文章正文description: 文章摘要writer: 作者source: 来源litpic: 缩略图flag: 特性(头条、推荐等)keywords: 关键词templet: 使用的模板- 等等...
- 接收从发布页面提交过来的所有数据,包括:
-
调用核心处理函数
(图片来源网络,侵删)- 根据第一步确定的
dopost值,调用相应的核心函数。 - 当
dopost == 'save'时:- 它会调用
InsertArticle()函数。 InsertArticle()函数内部会进行非常复杂的操作,包括:- 数据处理、处理HTML标签、生成摘要等。
- 生成静态页:根据模板和文章数据,生成HTML文章页面。
- 更新数据库:向
#@__archives(文章主表) 和#@__arctiny(文章微表) 中插入新记录。 - 更新栏目:更新对应栏目的文章数量、最后发布时间等信息。
- 更新缓存:更新栏目缓存、首页缓存等,以确保前台显示最新数据。
- 它会调用
- 根据第一步确定的
-
返回结果
- 操作完成后,
archives_do.php会根据执行结果,向用户输出一个提示信息。 - 成功时:通常会跳转到一个页面,并提示“添加成功”、“更新成功”等。
- 失败时:会提示具体的错误信息,如“标题不能为空”、“栏目选择错误”等。
- 操作完成后,
代码片段解析
下面是一个简化的代码逻辑,帮助你更好地理解其工作原理:
<?php
require_once(dirname(__FILE__)."/config.php");
require_once(DEDEINC."/archives.class.php");
require_once(DEDEINC."/dedetemplate.class.php");
// 检查用户是否登录
CheckRank(0, $cuserLogin, $cfg_md5safe);
// 获取操作类型
$dopost = empty($_POST['dopost']) ? '' : $_POST['dopost'];
// 根据不同的操作类型执行不同的逻辑
switch($dopost) {
case 'save': // 保存新文章
$arc = new Archives($typeid);
$arc->Save();
ShowMsg("成功发布一篇新文章!", "javascript:;");
exit();
break;
case 'edit': // 更新文章
$arc = new Archives($aid);
$arc->Edit();
ShowMsg("成功更新文章!", "javascript:;");
exit();
break;
case 'delete': // 删除文章
$arc = new Archives($aid);
$arc->Delete();
ShowMsg("成功删除文章!", "javascript:;");
exit();
break;
// ... 其他 case,如 'pub', 'check' 等
default:
ShowMsg("无效的操作请求!", "javascript:;");
exit();
break;
}
// ShowMsg 是一个封装好的提示和跳转函数
function ShowMsg($msg, $gourl, $onlymsg = 0, $limittime = 1000) {
// ... 显示提示信息的逻辑
}
?>
注意:现代版本的DedeCMS(如V5.7)已经将
archives_do.php中的很多逻辑封装到了archives.class.php这个类文件中,使得archives_do.php本身变得更加简洁,主要负责接收请求和调用类的实例。
重要性与修改建议
为什么重要?
- 内容发布的入口:所有后台的内容操作都通过它完成,是内容管理系统的“心脏”。
- 性能关键点:文章生成、数据库操作都在这里完成,这里的代码效率直接影响网站发布内容的速度。
- 安全关键点:它处理用户提交的所有数据,是SQL注入、XSS等攻击的主要防御点。
修改建议(谨慎!)
- 不要直接修改:除非你非常了解DedeCMS的底层架构,否则不建议直接修改此文件,错误的修改可能导致无法发布文章、网站崩溃等严重问题。
- 二次开发:如果你需要增加新的发布功能(发布时自动调用某个API),可以通过以下两种方式安全地进行:
- Hook钩子:在
archives_do.php的switch语句中,为你新增的dopost值添加一个case,然后调用你自定义的函数。 - 重写或继承类:如果你熟悉面向对象,可以继承
Archives类,并重写Save()或Edit()等方法,然后在archives_do.php中实例化你的新类。
- Hook钩子:在
- 调试:如果遇到发布问题,可以在此文件的关键位置(如
switch语句前后、核心函数调用前后)添加var_dump()或file_put_contents()来打印和记录变量信息,以便定位问题。
archives_do.php 是织梦CMS后台内容发布的命令执行中心,它通过 dopost 参数接收指令,调用底层函数来完成文章的增、删、改、查、审、发等一系列复杂操作,理解它的作用和工作原理,对于排查发布问题、进行二次开发以及深入学习DedeCMS的架构都至关重要。
