2011-01-06 114 views
1

我有一個D5網站,有成千上萬的節點和許多更多的評論。由於這個網站是面向新聞的,因此許多故事不再相關,並且因爲存檔原因而被保留。我想保留節點並刪除所有與一年前較老的節點有關的評論。從Drupal 5網站刪除舊評論

我很熟悉SQL和構建自己的模塊,我想知道如果刪除舊評論,可能會遇到什麼問題。任何提示或建議將是最受歡迎的。

:]

回答

0

應該沒有任何問題。把它們擦乾淨!

免責聲明:我從來沒有開發過使用drupal 5.x.只有6.所以我可能需要一些小的細節更正。

我打算建議視圖批量操作刪除每個節點類型的註釋,但是,它似乎並沒有爲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); 
} 

但是,如果有太多的評論,您的請求可能會超時。

0

如果您熟悉Views模塊,我認爲您可以使用Views Bulk Operations模塊批量刪除舊批註。 Drupal 5版本不再列在模塊頁面上,但您可以通過單擊查看所有版本找到它。

3

刪除註釋並不像從數據庫中刪除一行那麼簡單。我寫這sippet前一陣子從一個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模塊並從其'執行php'塊運行代碼。