2011-01-06 4 views
1

У меня есть сайт D5 с тысячами узлов и множество комментариев. Поскольку этот сайт ориентирован на новости, многие из историй больше не актуальны и хранятся в архивных целях. Я хотел бы сохранить узлы и удалить все комментарии, относящиеся к узлам, которые старше, чем год назад.Удаление старых комментариев от Drupal 5 site

Мне комфортно работать с SQL и строить свой собственный модуль, мне интересно, какие проблемы я мог бы запустить, если удалю старые комментарии. Любые советы или рекомендации были бы наиболее желанными.

:]

ответ

0

Не должно быть никаких проблем. Вытри их!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я никогда не разрабатывал, используя drupal 5.x. Только 6. Поэтому мне может понадобиться исправление некоторых мелких деталей.

Я собирался рекомендовать Views Bulk Operations для удаления комментариев на тип узла, однако он, похоже, не разработан для 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

Удаление комментария не так просто, как удаление строки из базы данных. Я написал это гренок некоторое время назад, чтобы удалить все комментарии из 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 для запроса, чтобы убедиться, что вы удаляете только старые комментарии.

В зависимости от производительности вашего сервера и количества комментариев, которые вы должны удалить, вы можете добавить set_time_limit() в блок while, чтобы предотвратить тайм-аут php.

Этот фрагмент кода можно запустить из пользовательского модуля, но вы также можете установить модуль Devel и запустить код из блока «выполнить php».

 Смежные вопросы

  • Нет связанных вопросов^_^