织梦后台批量更新文档工具

批量更新文档是织梦静态化模式下的核心维护操作,掌握工具使用可大幅缩短内容上线时间。

一、批量更新工具的原理

织梦静态化机制将动态数据写入 dede_archives 表,通过 makehtml_archives.php 调用 arc.archives.class.php 渲染模板,生成 HTML 文件到 /a/ 目录。批量更新即将该过程循环执行于多个 ID。

二、后台批量更新入口

一键更新

更新所有栏目、首页、专题

更新栏目

按栏目生成列表页

更新文档

指定 ID 范围生成

更新主页

仅生成首页 HTML

路径:后台 → 生成 → 各类批量更新菜单。

三、操作步骤

  1. 后台 → 生成 → 一键更新网站。
  2. 选择"更新所有"或指定栏目。
  3. 设置每批处理数量(建议 50-100 避免超时)。
  4. 点击开始,等待进度条完成。
  5. 完成后访问前台验证页面。

四、命令行批量更新脚本

对于数万条文档,后台界面易超时,推荐 CLI 脚本:

<?php
// /www/wwwroot/yoursite/cli_makehtml.php
require_once(dirname(__FILE__).'/include/common.inc.php');
require_once(DEDEADMIN.'/../include/makehtml_archives.class.php');

$start=isset($argv[1]) ? intval($argv[1]) : 0;
$end=isset($argv[2]) ? intval($argv[2]) : 0;

$sql="SELECT id FROM dede_archives WHERE id BETWEEN $start AND $end ORDER BY id";
$dsql->Execute('me', $sql);
$count=0;
while($row=$dsql->GetArray('me')){
    MakeArt($row['id'], true, true);
    $count++;
    if($count % 100==0){
        echo "已生成 {$count} 篇\n";
        @ob_flush(); @flush();
    }
}
echo "完成,共生成 {$count} 篇\n";

执行:php cli_makehtml.php 1000 2000

五、常见问题原因分析

5.1 更新到一半卡住

原因:PHP max_execution_time 超时、内存溢出、数据库连接断开。

解决:临时调大 set_time_limit(0)memory_limit=512M,并分批执行。

5.2 部分页面未更新

原因:缓存未清理、模板未生效、文档处于未审核状态。

注意:批量更新前建议清理 /data/cache//data/tplcache/,否则可能用旧模板渲染。

六、性能优化建议

开启 OPcache、调整 InnoDB Buffer Pool、使用 SSD 磁盘可显著提升生成速度。对于超大规模站点(10万+文档),建议采用宝塔队列任务分时段生成,避免单次任务执行数小时。

七、自动化集成

可在文档发布钩子中调用 MakeArt($arcid) 实时生成,避免后续手动批量更新:

// /include/extend.func.php
function autoMakeHtml($arcid){
    require_once(DEDEINC.'/arc.archives.class.php');
    MakeArt($arcid, true, true);
}
// 在文档保存后调用 autoMakeHtml($arcid)

八、行动指引

梳理全站批量更新流程后,建议根据站点规模配置每日定时任务,凌晨低峰期自动生成。同时建立"更新日志"记录生成耗时,定期优化模板与数据库索引,让更新过程稳定高效,为内容运营提供可靠支撑。