2011-01-06 19 views
1

Ich habe eine D5-Site mit Tausenden von Knoten und viele, viele weitere Kommentare. Da diese Seite nachrichtenorientiert ist, sind viele der Geschichten nicht mehr relevant und werden aus Archivgründen aufbewahrt. Ich möchte die Knoten behalten und alle Kommentare löschen, die sich auf Knoten beziehen, die älter als vor einem Jahr sind.Löschen alter Kommentare von Drupal 5 Website

Ich bin mit SQL vertraut und baue mein eigenes Modul, ich frage mich, welche Probleme ich laufen könnte, wenn ich alte Kommentare lösche. Irgendwelche Tipps oder Ratschläge wären sehr willkommen.

:]

Antwort

0

Es sollte keine Probleme geben. Wisch sie aus!

HAFTUNGSAUSSCHLUSS: Ich habe nie mit drupal 5.x entwickelt. Nur 6. Ich brauche vielleicht eine Korrektur bei einigen kleinen Details.

Ich wollte Views Bulk Operations empfehlen, die Kommentare pro Knotentyp zu löschen, es scheint jedoch nicht für 5.x entwickelt zu werden.

Sie haben einige Möglichkeiten, wie Sie dies tun können. Hier ist eine:

UPDATE HOOK:

Wenn Sie einen Helfer-Modul haben, erstellen Sie ein Update Haken. Dann können Sie dies mit update.php ausführen. Die Logik dahinter wäre so etwas wie (i die Abfrage nicht getestet)

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

dann

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

Allerdings, wenn es zu viele Kommentare sind, Ihre Anfrage kann eine Zeitüberschreitung.

0

Wenn Sie mit dem Modul Ansichten vertraut sind, können Sie mit dem Modul Views Bulk Operations alte Kommentare in großen Mengen löschen. Die Drupal 5-Version ist nicht mehr auf der Modulseite aufgeführt, Sie können sie jedoch finden, indem Sie auf Alle Versionen anzeigen klicken.

3

Das Löschen eines Kommentars ist nicht so einfach wie das Löschen einer Zeile aus der Datenbank. Ich schrieb dieses eine Weile sippet vor alle Kommentare von einer Drupal 5-Site zu löschen:

<?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); 
} 
?> 

Es auf dem Code basiert in comment_delete() und comment_confirm_delete_submit() und stellt sicher, dass alle relevanten Aktionen wie Haken Aufrufen und Aktualisieren von Statistiken durchgeführt werden, . In Ihrem Fall müssten Sie der Abfrage eine where-Klausel hinzufügen, um sicherzustellen, dass Sie nur die alten Kommentare löschen.

Abhängig von der Leistung Ihres Servers und der Anzahl der Kommentare, die Sie löschen müssen, können Sie einen set_time_limit() im while-Block hinzufügen, um ein php-Timeout zu verhindern.

Dieses Code-Snippet kann von einem benutzerdefinierten Modul ausgeführt werden, aber Sie können auch das Devel-Modul installieren und den Code aus dem Block 'execute php' ausführen.

Verwandte Themen