dede如何批量删除采集内容?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

一种是通过后台SQL命令直接操作数据库(推荐),另一种是修改核心文件增加一个新按钮(适合有一定开发基础的用户)。

dede增加批量删除采集内容的方法
(图片来源网络,侵删)

使用后台SQL命令(推荐,最安全)

这种方法的核心思想是:先找到所有采集内容对应的文章ID(arcid),然后根据这些ID批量删除文章和相关数据。

操作步骤:

  1. 登录DedeCMS后台

    使用你的管理员账号登录网站后台。

    dede增加批量删除采集内容的方法
    (图片来源网络,侵删)
  2. 进入SQL命令行工具

    • 在后台左侧菜单栏,找到 “系统” -> “SQL命令行工具”
    • 点击进入,你会看到一个文本框,用于输入SQL语句。
  3. 准备并执行SQL命令

    场景1:删除指定采集任务的所有内容

    假设你的采集任务的ID是 10(你可以在“采集”->“采集管理”中看到每个任务的ID)。

    dede增加批量删除采集内容的方法
    (图片来源网络,侵删)
    • 第一步:获取该任务下所有文章的ID 在SQL命令行工具中,输入以下查询语句,先看看会删除多少条数据,确认无误后再执行删除。

      SELECT arcid FROM dede_archives WHERE typeid IN (SELECT id FROM dede_arctype WHERE corank > -1 AND issystem <> -1);

      注意: 这句SQL可能不够精确,更精确的方法是如果你的采集任务有特定标记,比如在自定义字段里,但最常见的是,采集任务生成的文章通常会有一个特征,比如来源(source)或者关键词(keywords)包含特定词,或者它们属于某个特定的栏目(这个栏目是专门用来放采集内容的)。

      更推荐的精确查找方法(按栏目ID): 假设你所有采集的内容都放在ID为 50 的栏目下。

      SELECT id FROM dede_archives WHERE typeid = 50;
    • 第二步:批量删除文章及相关数据 如果你确认了要删除的栏目ID是 50,那么现在执行删除命令,DedeCMS的文章数据是分表存储的,所以需要删除多个表中的数据。

      -- 1. 删除主表文章
      DELETE FROM dede_archives WHERE typeid = 50;
      -- 2. 删除附加表内容(如果文章有模型,比如文章、图集等,需要删除对应表的数据)
      -- 假设使用的是默认的文章模型,附加表是 dede_addonarticle
      DELETE FROM dede_addonarticle WHERE aid IN (SELECT id FROM dede_archives WHERE typeid = 50);
      -- 3. 删除标签关系表数据
      DELETE FROM dede_taglist WHERE aid IN (SELECT id FROM dede_archives WHERE typeid = 50);
      -- 4. 删除评论数据
      DELETE FROM dede_feedback WHERE aid IN (SELECT id FROM dede_archives WHERE typeid = 50);

      说明:

      • 50 替换为你实际存放采集内容的栏目ID。
      • dede_addonarticle 是默认文章模型的附加表,如果你的采集内容使用了其他模型(比如图集dede_addonimages,软件dede_addonsoft等),你需要将 dede_addonarticle 替换为对应的表名。
      • 执行前,强烈建议先备份数据库!以防误操作。
  4. 更新数据库缓存

    • 执行完SQL删除后,为了确保数据一致性,建议去 “系统” -> “一键更新网站” -> “更新数据库缓存”,执行一次。

修改核心文件增加批量删除按钮(进阶)

如果你觉得每次都要用SQL命令不方便,可以修改文件,在列表页增加一个“批量删除”的按钮。此方法需要修改文件,升级时可能会被覆盖,请提前备份。

操作步骤:

  1. 找到并修改列表模板文件

    • 的列表文件通常位于 /dede/templets/ 目录下。
    • 文件名可能是 co_do.php 或相关的列表模板,但更常见的是,列表页面是动态生成的,逻辑文件在 /dede/co_action.php 中。
    • 经过分析,/dede/co_do.php 是处理采集任务操作的核心文件,但列表页面的显示逻辑可能在其他地方,为了简化,我们直接在处理批量操作的文件里添加功能。
  2. 修改 /dede/co_do.php 文件

    • 用FTP或服务器管理工具打开 /dede/co_do.php 文件。
    • 在文件中找到处理批量操作(如 batchDel)的代码段,如果没有,我们可以手动添加。
    • 在合适的位置(在 case 'batchmove': 的后面)添加一个新的 case 来处理批量删除。
    // 在 co_do.php 中添加如下代码
    // ... 其他 case 代码 ...
    case 'batchdel_collect':
        // 引入数据库操作类
        require_once(DEDEINC.'/datalist.class.php');
        // 获取选中的文章ID列表
        $arcids = isset($arcids) && is_array($arcids) ? $arcids : array();
        if (empty($arcids)) {
            ShowMsg('请先选择要删除的内容!', '-1');
            exit();
        }
        // 将ID数组用逗号连接成字符串
        $idstr = implode(',', $arcids);
        // 1. 删除主表数据
        $dsql->ExecuteNoneQuery("DELETE FROM `dede_archives` WHERE id IN ($idstr)");
        // 2. 删除附加表数据 (这里以默认的文章模型为例)
        // 注意:如果你的采集内容使用了不同模型,需要动态获取表名或遍历所有可能的附加表
        $dsql->ExecuteNoneQuery("DELETE FROM `dede_addonarticle` WHERE aid IN ($idstr)");
        // 3. 删除标签关系
        $dsql->ExecuteNoneQuery("DELETE FROM `dede_taglist` WHERE aid IN ($idstr)");
        // 4. 删除评论
        $dsql->ExecuteNoneQuery("DELETE FROM `dede_feedback` WHERE aid IN ($idstr)");
        ShowMsg('批量删除成功!', 'javascript:;');
        exit();
    // ... 其他 case 代码 ...

    注意:

    • dede_addonarticle 是默认文章模型的附加表,如果你的采集内容是图集,这里应该是 dede_addonimages,为了通用性,你可能需要更复杂的逻辑来判断文章类型并删除对应的附加表,或者干脆只删除主表和公共表(如标签、评论),因为主表删除后,附加表里的“孤儿”数据也没关系。
  3. 修改列表页模板,添加批量删除按钮和复选框

    • 这是最关键的一步,你需要找到生成采集内容列表的模板文件,这个文件可能不是 .html,而是PHP文件直接生成的。
    • 经过分析,采集任务的列表页面是在 /dede/co_main.php 中通过 DataList 类渲染的,它的模板文件通常是 /dede/templets/co_main.htm
    • 打开 /dede/templets/co_main.htm 文件。
    • 在列表的顶部操作栏(开始采集”、“重新采集”按钮旁边),添加一个“批量删除”按钮。
    • 确保列表的每一行都有一个复选框,name 属性是 arcids[]value 是文章的ID。

    修改 co_main.htm 示例:

    <!-- 在工具栏按钮区域添加 -->
    <input type="button" name='batchDelBtn' value='批量删除' class="coolbg np" style="width:80px" onclick="CheckArcs('batchdel_collect')" />
    <!-- 确保列表项中有这样的复选框 -->
    <td width="5%" align="center">
        <input type='checkbox' name='arcids[]' value='<?php echo $fields['id']; ?>' />
    </td>
    • CheckArcs('batchdel_collect') 是一个JavaScript函数,它会收集所有被勾选的复选框的 value,然后提交到 co_do.php,并传递 action=batchdel_collectarcids[] 参数。
  4. 检查并添加JavaScript函数

    • co_main.htm 文件中,查找是否存在 CheckArcs 函数,如果不存在,你需要手动添加它。
    • 这个函数通常在页面的底部。
    function CheckArcs(goaction) {
        var myform = document.getElementById('listForm');
        var arctype = '';
        var id = '';
        var msg = '你确定要执行此操作吗?';
        if (goaction == 'batchdel_collect') {
            msg = '警告:此操作将永久删除所选内容,且不可恢复!确定要删除吗?';
        }
        if (myform) {
            for (var i=0; i<myform.elements.length; i++) {
                var e = myform.elements[i];
                if (e.name == 'arcids[]' && e.checked) {
                    id += (id=='' ? e.value : ',' + e.value);
                }
            }
        }
        if (id == '') {
            ShowMsg('请先选择要操作的内容!', '-1');
            return;
        }
        if (confirm(msg)) {
            myform.action = 'co_do.php?dopost='+goaction;
            myform.submit();
        }
    }

总结与建议

方法 优点 缺点 推荐人群
SQL命令 安全,不修改核心文件,升级无忧,执行效率高。 需要手动输入SQL,对数据库操作不熟悉的人有风险。 所有用户,特别是新手和对系统稳定性要求高的用户。
修改文件 方便,在后台界面直接操作,用户体验好。 有风险,修改核心文件,系统升级后功能会丢失,需要重新修改。 有一定PHP和DedeCMS开发基础,且不介意在升级后重复修改的用户。

最终建议:

对于绝大多数用户,强烈推荐使用方法一(SQL命令),它虽然需要你手动操作一下,但这是最安全、最规范的做法,在执行删除SQL前,先用 SELECT 语句检查一遍,确保万无一失。

如果你是一个开发者,并且这个功能是你网站长期需要的,那么可以考虑使用方法二,并做好文件修改的记录,以便未来升级时进行同步。

-- 展开阅读全文 --
头像
dede自定义字段图片无法生成怎么办?
« 上一篇 昨天
织梦栏目如何去掉html后缀?
下一篇 » 昨天

相关文章

取消
微信二维码
支付宝二维码

目录[+]