Удаление старых комментариев с сайта Drupal 5 - PullRequest
1 голос
/ 06 января 2011

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

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

:]

Ответы [ 3 ]

3 голосов
/ 06 января 2011

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

0 голосов
/ 06 января 2011

Если вы знакомы с модулем Views, я думаю, что вы сможете массово удалить старые комментарии, используя модуль Views Bulk Operations .Версия Drupal 5 больше не указана на странице модуля, но ее можно найти, нажав «Просмотреть все версии».

0 голосов
/ 06 января 2011

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

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

Я собирался рекомендовать Views Bulk Operations для удаления комментариев для каждого типа узла, однако, похоже, он не разработан для 5.x.

У вас есть несколько вариантов, как это сделать. Вот один из них:

ОБНОВЛЕНИЕ КРЮЧКА:

Если у вас есть вспомогательный модуль, создайте хук обновления. Затем вы можете запустить это с помощью 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);
}

Однако, если комментариев слишком много, ваш запрос может истечь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...