групове видалення коментарів


11

як я можу видалити всі коментарі одразу? Я бачив, як це зробити з вузлами та модулем bulkdelete, як видалити всі вузли заданого типу вмісту? але я шукаю подібне рішення для коментарів.

Я шукаю рішення, яке не залишає жодних артефактів у базі даних. Чи найкращі рішення "Перегляд масових операцій"?

Відповіді:


7

AFAIK, VBO має бути в змозі виконати цю роботу, але я ще не намагався її видалити коментарі.

Інший спосіб - запустити якийсь код (у модулі або в блоці Deve-модуля 'виконувати php'), який отримує список усіх запитів від db, створює масив ідентифікаторів коментарів і передає цей масив функції comment_delete_multiple . Зауважте, що це може зайняти деякий час (залежно від продуктивності сервера та кількості коментарів), тому, можливо, ви зможете обійтись цим шляхом, наприклад, використовуючи set_time_limit (http://php.net/manual/en/function .set-time-limit.php) або пакетний API Drupal.

[оновлення: див. відповідь Кріса Коена, наприклад, код, заснований на такому підході.]


7

Це не альтернативна відповідь, а більш детальна робота над марквангендом, але я не міг прокоментувати його відповідь і залишити приклад коду. Таким чином, ручний підхід, використовуючи блок коду виконання devel, виглядав би так:


$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

comment_delete_multiple($cids);

Як зазначає marcvangend, це буде обмежено часом виконання на вашому сервері, тому вам потрібно буде тимчасово підвищити його, якщо у вас буде багато коментарів. Завдяки манарту та інстанціяфіямі за допомогу dbtng.


1
Дякуємо за вказівку, але ваш синтаксис вимкнено. Таблиця полягає в тому comment, що вам потрібен псевдонім, і результати comment_delte_multiple
необмеженого

@brian_d як би ви обробили результати необмеженого об'єкта, готові до коментаря_delte_multiple ()?
jackocnr

2

Особисто я хотів би перейти на модуль « Перегляд масових операцій» .

Цей модуль збільшує перегляди, дозволяючи виконувати масові операції на відображених рядках. Це робиться, показуючи прапорець перед кожним вузлом та додаючи поле вибору, що містить операції, які можна застосувати. Можна використовувати дії Drupal Core або правила.


0

Чесно кажучи, коли мені потрібно було це зробити, я просто робив це в базі даних. Ви видаляєте коментарі, виправляєте статистику коментарів та пуф, усі коментарі відпадають. Я б уникав цього робити, якщо у вас є модулі, які взаємодіють із коментарями якось дивно, інакше я б це запропонував.

TRUNCATE TABLE коментарі

ОНОВЛЕННЯ node_comment_statistics SET comment_count = 0


Я думаю, що перевага використання виклику drupal API comment_delete_multipleполягає в тому, що він може викликати додаткові гачки drupal для вас, залишаючи ваш БД потенційно чистішим.
brian_d

Ось чому я сказав, що пропоную уникати цього, якщо у вас є модулі, які взаємодіють із коментарями. Інакше, якщо у вас є коментарі на складі, я ніколи не відзначав жодних проблем з цим. Це, звичайно, набагато простіше зробити, якщо у вас є сайт, який отримав спам з тисячами коментарів.
Г.Мартін

Вам також потрібно врубати таблицю "field_data_comment_body", оскільки там зберігається вміст коментарів.
Крейдерс

0

Деякі засоби інтерфейсу Ви можете встановити модулі нижче

Перегляди - drupal.org/project/views

Кожен Drupal-сайт потребує, я вважаю ... Він генерує SQL на бекенді та відображає результати з налаштованими налаштуваннями, фільтрами, сортуванням, пейджингом ... тощо

VBO - http://drupal.org/project/views_bulk_operations Щоб дозволити групові операції (тобто видалити коментарі до цієї теми)

Перегляди адміністрації - http://drupal.org/project/admin_views Скористайтеся переглядами Views і VBO, замініть оригінальний коннетнет, коментарі, сторінки адміністратора користувача на menu_alter ...

  1. Після ввімкнення вищезгаданих модулів поверніться до сторінки адміністратора коментарів
  2. Поставте прапорець Вибрати всі ( будьте уважні , переконайтесь, що ви хочете видалити всі коментарі ...)
  3. Виберіть "Видалити" та "Надіслати" ( будьте обережні , пізніше не підтверджуйте кнопку ...)

0

Досягнуто видалення близько 45 000 коментарів за допомогою модуля резервного копіювання та перенесення. У розширеному налаштуваннях у розділі "Виключення даних із наступних таблиць" - спочатку натисніть клавішу Ctrl, потім виберіть коментар у списку - (будьте обережні, оскільки тут вже вибрані непотрібні таблиці кешу) - резервне копіювання - відновлення з цього резервного файлу. Ура!


0

Ця відповідь схожа на вже перелічену відповідь, але я змінив її, щоб запобігти «помилці пам’яті» приблизно для 27 000 коментарів. Це може зайняти деякий час, залежно від кількості коментарів. Просто обрізання таблиці коментарів може бути не дуже хорошою ідеєю; найкраще дозволити Drupal керувати видаленням вмісту.

Я створив сценарій PHP:

$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

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

... потім запустив сценарій з Друшем

drush @my_alias php-script my_script.php

0

Зазвичай я рекомендую використовувати VBO масово для видалення коментарів чи вузлів, але якщо у вас є ситуація, коли у вас сотні тисяч коментарів і у вас немає занадто багато часу, ось запит sql, який видалить усі незатверджені коментарі разом з усіма переглядами та даними, що стосуються тих коментарів, які в моєму випадку займали 1,2 Гб місця в БД

DELETE c, rcb, dcb
FROM
    comment AS c
JOIN field_revision_comment_body AS rcb ON (c.cid = rcb.entity_id)
JOIN field_data_comment_body AS dcb ON (rcb.entity_id = dcb.entity_id)
WHERE
    c. STATUS = 0

-2

Увімкніть фільтр PHP та створіть основну сторінку із наступним кодом:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>

1
ніколи не використовуйте PHP-фільтр для подібних речей (навіть для будь-якої іншої речі, PHP-фільтр, як правило, одна з найгірших ідей в Drupal)
Алехандро Морено
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.