eliminazione di commenti in blocco


Risposte:


7

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 alla funzione comment_delete_multiple . 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

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.


1
Grazie per la direzione, ma la tua sintassi è disattivata. La tabella è che commenthai bisogno di un alias e i risultati dell'oggetto grezzo non possono essere inseriti direttamente incomment_delte_multiple
brian_d

@brian_d come elaboreresti i risultati dell'oggetto grezzo pronti per comment_delte_multiple ()?
Jackocnr,

2

Personalmente, sceglierei il modulo Operazioni collettive di Views .

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. È possibile utilizzare le azioni Drupal Core o Rules.


0

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


Penso che il vantaggio di utilizzare la chiamata API drupal comment_delete_multiplesia che può chiamare hook aggiuntivi di drupal per te, lasciando il tuo DB potenzialmente più pulito.
brian_d

Ecco perché ho detto che suggerirei di evitare di farlo se hai moduli che interagiscono con i commenti. Altrimenti, se hai commenti in stock, non ho mai notato alcun problema. È sicuramente molto più facile da fare se hai un sito che è stato spammato con migliaia di commenti.
G. Martedì

Devi anche troncare la tabella 'field_data_comment_body', poiché è lì che viene archiviato il contenuto dei commenti.
Creynders,

0

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

Visualizzazioni: drupal.org/project/views

Credo che ogni sito Drupal abbia bisogno ... 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 Approfitta di Views e VBO, sostituisci contnet originale, commenta, 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

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

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 che Drupal gestisca la cancellazione dei contenuti.

Ho creato uno script 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

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

-2

Abilita il filtro PHP e crea una pagina di base con il seguente codice:

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

1
non usare mai il filtro PHP per cose del genere (anche per qualsiasi altra cosa, il filtro PHP è generalmente una delle peggiori idee in Drupal)
Alejandro Moreno,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.