it-swarm.it

eliminazione di commenti in blocco

come posso eliminare tutti i commenti contemporaneamente? Ho visto come farlo con i nodi e il modulo bulkdelete, Come eliminare tutti i nodi di un determinato tipo di contenuto? ma sto cercando una soluzione simile per i commenti.

Sto cercando una soluzione che non lasci alcun artefatto nel database. Views Bulk Operations è la soluzione migliore?

11
brian_d

AFAIK, VBO dovrebbe essere in grado di fare il lavoro, ma non ho provato da solo a eliminare i commenti.

Un altro modo è quello di eseguire un po 'di codice (in un modulo o nel blocco "esegui php" del modulo Devel) che ottiene un elenco di tutte le query dal db, crea un array di ID di commento e passa tale array al comment_delete_multiple funzione. Si noti che questo può richiedere del tempo (a seconda delle prestazioni del server e del numero di commenti), quindi è possibile aggirare il problema, ad esempio utilizzando set_time_limit (http://php.net/manual/en/function .set-time-limit.php) o API batch di Drupal.

[aggiornamento: vedi la risposta di Chris Cohen per esempio codice basato su questo approccio.]

7
marcvangend

Questa non è una risposta alternativa, più un'elaborazione su quella di marcvangend, ma non ho potuto commentare la sua risposta e lasciare un codice di esempio. Quindi l'approccio manuale, usando il blocco di codice di esecuzione di devel, assomiglierebbe un po 'a:


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

comment_delete_multiple($cids);

Come sottolinea marcvangend, questo sarà limitato al tempo di esecuzione sul tuo server, quindi dovrai aumentarlo temporaneamente se hai molti commenti. Grazie a manarth e instanceofjamie per l'assistenza di dbtng.

7
Chris Cohen

Personalmente, sceglierei il modulo Views Bulk Operations .

Questo modulo aumenta le visualizzazioni consentendo l'esecuzione di operazioni in blocco sulle righe visualizzate. Lo fa mostrando una casella di controllo davanti a ciascun nodo e aggiungendo una casella di selezione contenente le operazioni che possono essere applicate. Drupal È possibile utilizzare azioni Core o Rules.

2
Karl Jóhann

Questa risposta è simile a una risposta già elencata, ma l'ho modificata per evitare un "errore di memoria insufficiente" per circa 27.000 commenti. Questa operazione richiederà un po 'di tempo a seconda del numero di commenti. Troncare semplicemente la tabella dei commenti potrebbe non essere una buona idea; è meglio lasciare Drupal gestire l'eliminazione dei contenuti.

Ho creato uno PHP:

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

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

... poi ha eseguito la sceneggiatura con Drush

drush @my_alias php-script my_script.php
0
Parag

Onestamente, quando avevo bisogno di farlo, l'ho appena fatto nel database. Elimina i commenti, correggi le statistiche dei commenti e la poof, tutti i commenti sono spariti. Eviterei di farlo se hai moduli che interagiscono con i commenti in qualche modo strano, altrimenti è quello che suggerirei.

Commenti TRUNCATE TABLE

AGGIORNAMENTO node_comment_statistics SET comment_count = 0

0
G.Martin

Hai ottenuto l'eliminazione di circa 45.000 commenti utilizzando il modulo Backup e migrazione. Nella configurazione avanzata in "Escludi i dati dalle seguenti tabelle" - premi prima il tasto Ctrl quindi seleziona il commento nell'elenco - (fai attenzione perché qui sono già selezionate le tabelle della cache non necessarie) - backup - ripristina da questo file di backup. Evviva!

0
VivMajor

Alcuni strumenti dell'interfaccia utente È possibile installare i moduli seguenti

Visualizzazioni: drupal.org/project/views

Ogni Drupal ha bisogno, credo ... Genera SQL nel back-end e visualizza i risultati con impostazioni configurabili, filtri, ordinamento, paging ... ecc.

VBO - http://drupal.org/project/views_bulk_operations Per consentire operazioni in blocco (ovvero eliminare i commenti per questa discussione)

Viste di amministrazione - http://drupal.org/project/admin_views Sfrutta i vantaggi di Views e VBO, sostituisci contnet originale, commento, pagine di amministrazione dell'utente con menu_alter ...

  1. Dopo aver abilitato i moduli precedenti, torna alla pagina di amministrazione dei commenti
  2. Spuntare selezionare tutto ( fare attenzione , assicurarsi di voler eliminare tutti i commenti ...)
  3. Seleziona "Elimina" e "Invia" ( fai attenzione , non più il pulsante di conferma in seguito ...)
0
Ck Poon

Di solito consiglierei di usare VBO per eliminare commenti o nodi in blocco, ma se ti trovi in ​​una situazione in cui hai centinaia di migliaia di commenti e non hai troppo tempo, ecco una query sql che eliminerà tutti i commenti non approvati insieme a tutte le revisioni e i dati relativi a quei commenti che nel mio caso occupavano 1,2 GB di spazio nel 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
0
Octan