私は何千ものノードとさらに多くのコメントを持つ D5 サイトを持っています。このサイトはニュース指向であるため、多くの記事はもはや関連性がなく、アーカイブの目的で保持されています。ノードを保持し、1 年前よりも古いノードに関連するすべてのコメントを削除したいと思います。
私は SQL と独自のモジュールの構築に慣れています。古いコメントを削除すると、どのような問題が発生する可能性があるのか 疑問に思っています。ヒントやアドバイスは大歓迎です。
:]
私は何千ものノードとさらに多くのコメントを持つ D5 サイトを持っています。このサイトはニュース指向であるため、多くの記事はもはや関連性がなく、アーカイブの目的で保持されています。ノードを保持し、1 年前よりも古いノードに関連するすべてのコメントを削除したいと思います。
私は SQL と独自のモジュールの構築に慣れています。古いコメントを削除すると、どのような問題が発生する可能性があるのか 疑問に思っています。ヒントやアドバイスは大歓迎です。
:]
コメントの削除は、データベースから行を削除するほど簡単ではありません。Drupal 5 サイトからすべてのコメントを削除するために、この sippet を少し前に書きました。
<?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' ブロックからコードを実行することもできます。
問題はないはずです。それらを一掃してください!
免責事項: drupal 5.x を使用して開発したことはありません。6つしかないので、細部の修正が必要かもしれません.
Views Bulk Operations でノード タイプごとにコメントを削除することをお勧めするつもりでしたが、5.x 向けには開発されていないようです。
これを行う方法にはいくつかのオプションがあります。これが1つです:
更新フック:
ヘルパー モジュールがある場合は、更新フックを作成します。その後、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 バージョンはモジュール ページに表示されなくなりましたが、[View All Releases] をクリックすると表示されます。