suppression en masse des commentaires

11

comment puis-je supprimer tous les commentaires à la fois? J'ai vu comment le faire avec des nœuds et un module de suppression en bloc, comment supprimer tous les nœuds d'un type de contenu donné? mais je cherche une solution similaire pour les commentaires.

Je recherche une solution qui ne laisse aucun artefact dans la base de données. Views Bulk Operations est-il la meilleure solution?

brian_d
la source

Réponses:

7

AFAIK, VBO devrait pouvoir faire le travail, mais je ne l'ai pas essayé moi-même pour supprimer les commentaires.

Une autre façon consiste à exécuter du code (dans un module ou dans le bloc `` exécuter php '' du module Devel) qui obtient une liste de toutes les requêtes de la base de données, crée un tableau des ID de commentaire et transmet ce tableau à la fonction comment_delete_multiple . Notez que cela peut prendre un certain temps (en fonction des performances du serveur et du nombre de commentaires), vous devrez peut-être contourner cela, par exemple en utilisant set_time_limit (http://php.net/manual/en/function .set-time-limit.php) ou l'API batch de Drupal.

[mise à jour: voir la réponse de Chris Cohen pour un exemple de code basé sur cette approche.]

marcvangend
la source
7

Ce n'est pas une réponse alternative, plus une élaboration sur celle de marcvangend, mais je n'ai pas pu commenter sa réponse et laisser un exemple de code. Ainsi, l'approche manuelle, utilisant le bloc de code d'exécution de devel, ressemblerait un peu à:


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

comment_delete_multiple($cids);

Comme le souligne marcvangend, cela va être limité au temps d'exécution sur votre serveur, vous devrez donc l'augmenter temporairement si vous avez beaucoup de commentaires. Merci à manarth et instanceofjamie pour l'aide de dbtng.

Chris Cohen
la source
1
Merci pour la direction, mais votre syntaxe est désactivée. Le tableau est comment, vous avez besoin d'un alias et les résultats des objets bruts ne peuvent pas être introduits directement danscomment_delte_multiple
brian_d
@brian_d comment traiteriez-vous les résultats des objets bruts prêts pour comment_delte_multiple ()?
jackocnr
2

Personnellement, je choisirais le module Views Bulk Operations .

Ce module augmente les vues en permettant l'exécution d'opérations en bloc sur les lignes affichées. Pour ce faire, il affiche une case à cocher devant chaque nœud et ajoute une zone de sélection contenant les opérations qui peuvent être appliquées. Les actions Drupal Core ou Rules peuvent être utilisées.

Karl Jóhann
la source
0

Honnêtement, quand je devais le faire, je l'ai juste fait dans la base de données. Vous supprimez les commentaires, corrigez les statistiques de commentaire et pouf, tous les commentaires ont disparu. J'éviterais de le faire si vous avez des modules qui interagissent avec les commentaires d'une manière étrange, sinon c'est ce que je suggère.

Commentaires TRUNCATE TABLE

UPDATE node_comment_statistics SET comment_count = 0

G.Martin
la source
Je pense que l'avantage d'utiliser l'appel de l'API Drupal comment_delete_multipleest qu'il peut appeler des crochets Drupal supplémentaires pour vous, laissant votre base de données potentiellement plus propre.
brian_d
C'est pourquoi j'ai dit que je suggérerais d'éviter de le faire si vous avez des modules qui interagissent avec les commentaires. Sinon, si vous avez des commentaires sur les actions, je n'ai jamais noté de problème avec. C'est certainement beaucoup plus facile à faire si vous avez un site qui a été spammé avec des milliers de commentaires.
G.Martin
Vous devez également tronquer la table 'field_data_comment_body', car c'est là que le contenu des commentaires est stocké.
Creynders
0

Quelques outils d'interface utilisateur Vous pouvez installer les modules ci-dessous

Vues - drupal.org/project/views

Chaque site Drupal a besoin, je crois ... Il génère du SQL au niveau du backend et affiche les résultats avec des paramètres configurables, des filtres, le tri, la pagination ... etc.

VBO - http://drupal.org/project/views_bulk_operations Pour autoriser les opérations en bloc (c.-à-d. Supprimer les commentaires pour ce fil)

Vues d'administration - http://drupal.org/project/admin_views Profitez des vues et du VBO, remplacez le contnet d'origine, les commentaires, les pages d'administration de l'utilisateur par menu_alter ...

  1. Après avoir activé les modules ci-dessus, revenez à la page d'administration des commentaires
  2. Cochez tout sélectionner ( attention , assurez-vous de supprimer tous les commentaires ...)
  3. Sélectionnez "Supprimer" et "Soumettre" ( attention , pas de bouton de confirmation plus tard ...)
Ck Poon
la source
0

Obtention de la suppression d'environ 45 000 commentaires à l'aide du module Sauvegarde et migration. Dans la configuration avancée dans `` Exclure les données des tableaux suivants '' - appuyez d'abord sur la touche Ctrl puis sélectionnez un commentaire dans la liste - (faites attention car ici les tables de cache inutiles sont déjà sélectionnées) - sauvegarde - restaurez à partir de ce fichier sauvegardé. Hourra!

VivMajor
la source
0

Cette réponse est similaire à une réponse déjà répertoriée mais je l'ai modifiée pour éviter une «erreur de mémoire insuffisante» pour environ 27 000 commentaires. Cela prendra un certain temps à s'exécuter en fonction du nombre de commentaires. Le simple fait de tronquer le tableau des commentaires peut ne pas être une bonne idée; il est préférable de laisser Drupal gérer la suppression du contenu.

J'ai créé un script PHP:

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

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

... puis a exécuté le script avec Drush

drush @my_alias php-script my_script.php
Parag
la source
0

Je recommanderais généralement d'utiliser VBO pour supprimer des commentaires ou des nœuds en bloc, mais si vous êtes dans une situation où vous avez des centaines de milliers de commentaires et que vous n'avez pas trop de temps, voici une requête SQL qui supprimera tous les commentaires non approuvés ainsi que toutes les révisions et données liées à ces commentaires qui, dans mon cas, prenaient 1,2 Go d'espace dans 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
Octan
la source
-2

Activez le filtre PHP et créez une page de base avec le code suivant:

<?php
  db_query("TRUNCATE TABLE {comment}");
  db_query("UPDATE {node_comment_statistics} SET comment_count = 0");
?>
jordi
la source
1
n'utilisez jamais le filtre PHP pour des choses comme ça (même pour toute autre chose, le filtre PHP est généralement l'une des pires idées de Drupal)
Alejandro Moreno