2011-01-06 6 views
1

나는 D5 사이트에 수천 개의 노드가 있으며 많은 의견이 더 많이 있습니다. 이 사이트는 뉴스 지향적이기 때문에 많은 이야기가 더 이상 관련이없고 보관 목적으로 보관됩니다. 노드를 유지하고 1 년 전의 노드와 관련된 모든 주석을 삭제하고 싶습니다.Drupal 5 사이트의 오래된 주석 삭제

나는 SQL에 익숙하며 자신 만의 모듈을 구축하고 있습니다. 오래된 주석을 삭제하면 어떤 문제가 생길지 궁금합니다. 모든 조언이나 조언을 환영 할 것입니다.

:]

답변

0

는 문제가 안된다. 그들을 닦아 라!

면책 조항 : Drupal 5.x를 사용하여 개발 한 적이 없습니다. 오직 6. 그래서 나는 작은 세부 사항에 약간의 수정이 필요할 수 있습니다.

노드 유형별 코멘트를 삭제하려면 일괄 작업보기를 권장하지만, 5.x 용으로 개발되지는 않습니다.

몇 가지 옵션이 있습니다. 여기에 하나입니다

업데이트 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

메모를 삭제하는 것은 데이터베이스에서 행을 삭제하는 것만 큼 간단하지 않습니다. 나는 이것이 드루팔 (5) 사이트에서 모든 댓글을 삭제 얼마 전에 빵 조각 쓴 : 그것은 comment_delete()comment_confirm_delete_submit()의 코드 기반으로

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

및 통계를 후크를 호출하고 업데이트 같은 모든 관련 조치가 수행되는지 확인합니다 . 귀하의 경우에는 이전 주석 만 삭제할 수 있도록 쿼리에 where 절을 추가해야합니다.

서버 성능 및 삭제해야하는 댓글의 수에 따라 PHP 대기 시간을 방지하기 위해 while 블록에 set_time_limit()을 추가 할 수 있습니다.

이 코드 스 니펫은 맞춤 모듈에서 실행할 수 있지만 Devel 모듈을 설치하고 '실행 PHP'블록에서 코드를 실행할 수도 있습니다.

관련 문제