【问题标题】:Deleting old comments from Drupal 5 site从 Drupal 5 站点删除旧评论
【发布时间】:2011-01-06 04:32:02
【问题描述】:

我有一个 D5 站点,其中包含数千个节点和许多许多 cmets。由于该站点以新闻为导向,因此许多故事不再相关并出于存档原因而保留。我想保留节点并删除与一年前的节点相关的所有 cmets。

我对 SQL 和构建自己的模块很满意,我想知道如果我删除旧的 cmets 可能会遇到什么问题。任何提示或建议都将受到欢迎。

:]

【问题讨论】:

    标签: drupal drupal-5 drupal-comments


    【解决方案1】:

    删除评论并不像从数据库中删除一行那么简单。我前段时间写了这个 sippet 来从 Drupal 5 站点中删除 所有 cmets:

    <?php
    $result = db_query('SELECT c.*, u.name AS registered_name, u.uid FROM {comments} c INNER JOIN {users} u ON u.uid = c.uid');
    while ($comment = db_fetch_object($result)) {
      $comment->name = $comment->uid ? $comment->registered_name : $comment->name;
      _comment_delete_thread($comment);
      _comment_update_node_statistics($comment->nid);
    }
    ?>
    

    它基于comment_delete()comment_confirm_delete_submit() 中的代码,并确保执行所有相关操作,例如调用挂钩和更新统计信息。在您的情况下,您必须在查询中添加 where 子句,以确保您只删除旧的 cmets。

    根据您的服务器性能和您必须删除的 cmets 数量,您可能需要在 while 块中添加 set_time_limit() 以防止 php 超时。

    此代码 sn-p 可以从自定义模块运行,但您也可以安装 Devel 模块并从它的“执行 php”块运行代码。

    【讨论】:

      【解决方案2】:

      如果您熟悉 Views 模块,我认为您可以使用 Views Bulk Operations 模块批量删除旧的 cmets。 Drupal 5 版本不再列在模块页面上,但您可以通过单击查看所有版本找到它。

      【讨论】:

        【解决方案3】:

        应该没有问题。消灭它们!

        免责声明:我从未使用过 drupal 5.x 进行开发。只有6个。所以我可能需要对一些小细节进行一些更正。

        我打算推荐 Views Bulk Operations 来删除每个节点类型的 cmets,但是,它似乎不是为 5.x 开发的。

        您有几种方法可以做到这一点。这是一个:

        更新挂钩:

        如果您有帮助模块,请创建一个更新挂钩。然后你可以使用 update.php 运行它。这背后的逻辑类似于(我没有测试过查询)

        SELECT c.cid FROM comments c
        INNER JOIN node ON n.nid = c.nid
        WHERE n.type = 'story'
        

        然后

        foreach ($cids as $cid) {
          comment_delete($cid);
        }
        

        但是,如果 cmets 过多,您的请求可能会超时。

        【讨论】:

          猜你喜欢
          • 2011-12-05
          • 2011-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-01
          相关资源
          最近更新 更多