删除Drupal 5站点的旧评论

时间:2011-01-06 04:32:03

标签: drupal drupal-5 drupal-comments

我有一个D5网站,有数千个节点,还有很多很多评论。由于该网站是面向新闻的,因此许多故事不再具有相关性,并且出于档案原因而保留。我想保留节点并删除与一年前较旧的节点相关的所有注释。

我很熟悉SQL并构建自己的模块,我想知道如果我删除旧的注释会遇到什么问题。任何提示或建议都是最受欢迎的。

3 个答案:

答案 0 :(得分:3)

删除注释并不像从数据库中删除行那么简单。我刚刚写了这篇文章来删除Drupal 5网站上的所有评论:

<?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子句,以确保您只删除旧的注释。

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

此代码段可以从自定义模块运行,但您也可以安装Devel模块并从它的'execute php'块运行代码。

答案 1 :(得分:0)

应该没有任何问题。擦掉它们!

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

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

您可以选择如何执行此操作。这是一个:

UPDATE HOOK:

如果您有辅助模块,请创建更新挂钩。然后你可以使用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);
}

但是,如果评论太多,您的请求可能会超时。

答案 2 :(得分:0)

如果您熟悉视图模块,我认为您可以使用Views Bulk Operations模块批量删除旧评论。 Drupal 5版本不再列在模块页面上,但您可以通过单击View All Releases找到它。