繁体   English   中英

从Drupal 5网站删除旧评论

[英]Deleting old comments from Drupal 5 site

我有一个D5站点,其中包含数千个节点和许多很多其他评论。 由于此站点是面向新闻的,因此许多故事不再相关,并且出于存档原因而保留。 我想保留节点,并删除所有与一年前节点有关的注释。

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

:]

删除注释并不像从数据库中删除行那么简单。 我之前写过此代码片段是为了删除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”块运行代码。

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

免责声明:我从未开发过Drupal5.x。 只有6个。因此,我可能需要对一些小细节进行一些更正。

我打算建议使用Views Bulk Operations删除每个节点类型的注释,但是,它似乎不是为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);
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM