usuwanie komentarzy zbiorczo

11

Jak mogę usunąć wszystkie komentarze naraz? Widziałem, jak to zrobić z węzłami i modułem bulkdelete, jak usunąć wszystkie węzły danego typu treści? ale szukam podobnego rozwiązania dla komentarzy.

Szukam rozwiązania, które nie pozostawia żadnych artefaktów w bazie danych. Czy Views Bulk Operations jest najlepszym rozwiązaniem?

brian_d
źródło

Odpowiedzi:

7

AFAIK, VBO powinien być w stanie wykonać to zadanie, ale sam nie próbowałem usunąć komentarzy.

Innym sposobem jest uruchomienie kodu (w module lub w bloku Devel modułu „wykonaj php”), który pobiera listę wszystkich zapytań z bazy danych, buduje tablicę identyfikatorów komentarzy i przekazuje tę tablicę do funkcji comment_delete_multiple . Pamiętaj, że może to zająć trochę czasu (w zależności od wydajności serwera i liczby komentarzy), więc możesz się obejść, na przykład używając set_time_limit (http://php.net/manual/en/function .set-time-limit.php) lub wsadowy interfejs API Drupala.

[aktualizacja: patrz odpowiedź Chrisa Cohena, na przykład kod oparty na tym podejściu.]

marcvangend
źródło
7

To nie jest alternatywna odpowiedź, bardziej rozwinięcie marcvangend, ale nie mogłem skomentować jego odpowiedzi i zostawić przykładowego kodu. Podejście ręczne, z wykorzystaniem bloku kodu wykonania devel, wyglądałoby więc trochę tak:


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

comment_delete_multiple($cids);

Jak wskazuje marcvangend, będzie to ograniczone do czasu wykonania na twoim serwerze, więc będziesz musiał go tymczasowo podnieść, jeśli masz dużo komentarzy. Dzięki manarth i instanceofjamie za pomoc dbtng.

Chris Cohen
źródło
1
Dzięki za wskazówki, ale twoja składnia jest wyłączona. Tabela jest taka comment, że potrzebujesz aliasu, a wyników surowego obiektu nie można podać bezpośrednio docomment_delte_multiple
brian_d 15.03.11
@brian_d jak przetworzyłbyś wyniki surowego obiektu gotowe na comment_delte_multiple ()?
jackocnr
2

Osobiście wybrałbym moduł Views Bulk Operations .

Ten moduł rozszerza widoki, umożliwiając wykonywanie operacji zbiorczych w wyświetlanych wierszach. Robi to, pokazując pole wyboru przed każdym węzłem i dodając pole wyboru zawierające operacje, które można zastosować. Można użyć akcji Drupal Core lub Rules.

Karl Jóhann
źródło
0

Szczerze mówiąc, kiedy musiałem to zrobić, po prostu zrobiłem to w bazie danych. Usuwasz komentarze, naprawiasz statystyki komentarzy i puf, wszystkie komentarze zniknęły. Unikałbym tego, jeśli masz moduły wchodzące w interakcje z komentarzami w jakiś dziwny sposób, w przeciwnym razie sugerowałbym to.

UWAGI TABELI ŚCIENNEJ

AKTUALIZACJA_katalog_węzła_katalogu SET comment_count = 0

G.Martin
źródło
Myślę, że zaletą używania wywołania API drupal comment_delete_multiplejest to, że może on wywoływać dla ciebie dodatkowe zaczepy drupal, pozostawiając twoją bazę danych potencjalnie czystszą.
brian_d 15.03.11
Dlatego powiedziałem, że sugeruję unikanie tego, jeśli masz moduły wchodzące w interakcje z komentarzami. W przeciwnym razie, jeśli masz komentarze akcji, nigdy nie zauważyłem żadnych problemów z tym. Z pewnością jest to o wiele łatwiejsze, jeśli masz witrynę, która została spamowana tysiącami komentarzy.
G.Martin,
Musisz także obciąć tabelę „field_data_comment_body”, ponieważ tam przechowywana jest treść komentarzy.
Creynders
0

Niektóre narzędzia interfejsu użytkownika Poniżej możesz zainstalować moduły

Widoki - drupal.org/project/views

Wierzę, że każda witryna Drupal potrzebuje ... Generuje SQL w backend i wyświetla wyniki z konfigurowalnymi ustawieniami, filtrami, sortowaniem, stronicowaniem ... itp.

VBO - http://drupal.org/project/views_bulk_operations Aby zezwolić na operacje zbiorcze (tzn. Usunąć komentarze do tego wątku)

Widoki administracyjne - http://drupal.org/project/admin_views Skorzystaj z widoków i VBO, zamień oryginalny contnet, komentarz, strony administratora użytkownika na menu_alter ...

  1. Po włączeniu powyższych modułów wróć do strony administratora komentarza
  2. Zaznacz zaznacz wszystko ( bądź ostrożny , upewnij się, że chcesz usunąć wszystkie komentarze ...)
  3. Wybierz „Usuń” i „Prześlij” (zachowaj ostrożność , nie więcej potwierdzaj później).
Ck Poon
źródło
0

Osiągnięto usunięcie około 45 000 komentarzy za pomocą modułu Backup and Migrate. W ustawieniach zaawansowanych w „Wyklucz dane z poniższych tabel” - najpierw naciśnij klawisz Ctrl, a następnie wybierz komentarz z listy - (uważaj, ponieważ tutaj są już zaznaczone niepotrzebne tabele pamięci podręcznej) - kopia zapasowa - przywróć z tego pliku kopii zapasowej. Hurra!

VivMajor
źródło
0

Ta odpowiedź jest podobna do już wymienionej, ale zmodyfikowałem ją, aby zapobiec „błędowi braku pamięci” dla około 27 000 komentarzy. Wykonanie zajmie trochę czasu w zależności od liczby komentarzy. Samo obcięcie tabeli komentarzy może nie być dobrym pomysłem; najlepiej pozwolić Drupalowi zająć się usuwaniem treści.

Stworzyłem skrypt PHP:

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

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

... następnie uruchomiłem skrypt z Drush

drush @my_alias php-script my_script.php
Parag
źródło
0

Zwykle polecam użyć VBO do masowego usuwania komentarzy lub węzłów, ale jeśli jesteś w sytuacji, gdy masz setki tysięcy komentarzy i nie masz zbyt wiele czasu, oto zapytanie SQL, które usuwa wszystkie niezatwierdzone komentarze wraz ze wszystkimi poprawkami i danymi związanymi z tymi komentarzami, które w moim przypadku zajmowały 1,2 GB miejsca w DB

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
Oktan
źródło
-2

Włącz filtr PHP i utwórz podstawową stronę z następującym kodem:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
Jordi
źródło
1
nigdy nie używaj filtra PHP do takich rzeczy (nawet w przypadku innych rzeczy, filtr PHP jest ogólnie jednym z najgorszych pomysłów w Drupal)
Alejandro Moreno