it-swarm.it

Come eliminare tutti i nodi di un determinato tipo di contenuto?

Ho diverse migliaia di nodi di un determinato tipo di contenuto. Usando l'interfaccia web (esempio.com/admin/content), posso cancellarne solo 50 alla volta. Come posso eliminarli rapidamente?

33
Greg

C'è un modulo per quello (TM).

Vedi Bulk Delete .

Ciò utilizzerà l'API Batch per eliminare i nodi per evitare problemi di timeout o di memoria quando si eliminano migliaia di nodi con una singola chiamata a node_delete_multiple ().

Bulk Delete è un modulo abbandonato. Vedi per le alternative:

33
Berdir

Osservando il modulo Devel Generate come fonte di ispirazione, ecco la sua funzione "content kill" devel_generate_content_kill :

function devel_generate_content_kill($values) {
  $results = db_select('node', 'n')
              ->fields('n', array('nid'))
              ->condition('type', $values['node_types'], 'IN')
              ->execute();
  foreach ($results as $result) {
    $nids[] = $result->nid;
  }

  if (!empty($nids)) {
    node_delete_multiple($nids);
    drupal_set_message(t('Deleted %count nodes.', array('%count' => count($nids))));
  }
}

Quindi proverei o usando Devel Generate per eliminare tutti i nodi ma non crearne di nuovi, oppure utilizzare example.com/devel/php per chiamare direttamente devel_generate_content_kill(array('node_types' => array('my_node_type')));.

27
tim.plunkett

In Drupal 8 un modo è utilizzare il metodo entityQuery () con il metodo EntityStorageInterface :: delete () :

$result = \Drupal::entityQuery("node")
    ->condition("type", "YOUR_CONTENT_TYPE_NAME")
    // If the update is being executed via drush entityQuery will only
    // return the content uid 0 have access to. To return all set
    // accessCheck to false since it defaults to TRUE. 
    ->accessCheck(FALSE)
    ->execute();

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadMultiple($result);
$storage_handler->delete($entities);

Se è necessario applicare altri filtri/condizioni, è possibile controllare la pagina dell'interfaccia QueryInterface

[~ # ~] edit [~ # ~] (In altri modi, grazie a @ 4k4 ):

$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);

Se vuoi testare il codice puoi usare:

drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'

Questo eliminerà tutti i tuoi articoli.

19

Se si desidera farlo esclusivamente tramite l'interfaccia utente, è possibile utilizzare il modulo devel_generate.

  1. Passare al menu "Genera contenuto" in "Configurazione" (admin/config/development/generate/content).
  2. Seleziona i tipi di contenuto che desideri eliminare.
  3. Assicurati che la casella di controllo accanto a "Elimina tutto il contenuto in questi tipi di contenuto prima di generare nuovo contenuto" sia selezionata.
  4. Imposta il numero di nodi che desideri generare su "0".

In questo modo, non verranno generati nodi e verranno eliminati tutti i nodi dei tipi selezionati.

13
areynolds

Puoi farlo in Drupal 7 usando Execute PHP parte del codice del modulo Devel inserendo:

$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
  node_delete($record->nid);
}
10
Colin Shipton

Crea un file con il codice seguente nella radice di drupal ed esegui il file.

<?php
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

  $aquery= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'company'");
  while ($row = db_fetch_object($aquery)) {
    node_delete($row->nid);
  }
?>
10
Satya

Fallo nel terminale, se usi Drush e il modulo elimina tutto :

 drush delete-all [content-type-machine-name]


Examples:
 drush delete-all article             Delect all article nodes.
 drush delete-all all                 Delete nodes of all types.
 drush delete-all --reset             Delete nodes of all types, and reset node, revision and comment counters.
 drush delete-all users               Delete users.

Options:
 --reset                              Reset counter for node, revision and comment tables.
 --roles                              pick roles
8
shrish

Views Operazioni collettive fornisce una schermata di amministrazione del nodo configurabile abilitata per BatchAPI che consente di filtrare per tipo, selezione di tutti i nodi corrispondenti ai criteri di ricerca, ecc.

Questa è la mia soluzione a mani basse in Drupal 6 - oltre all'eliminazione batch, puoi modificare collettivamente i nodi e fare un sacco di altre cose.

Sembra che la versione Drupal 7 non sia ancora pronta - ma guarderei quel modulo per una versione D7.

5
Darren Petersen

Con il modulo Devel, usando drush:

drush genc 0 --types=article --kill

O nell'interfaccia utente come spiegato qui: http://befused.com/drupal/delete-nodes-devel

4
sunzu

Un altro frammento è:

$query = db_query("SELECT n.nid FROM {node} n WHERE n.type = 'TO_BE_DELETED'"); 
while ($n = db_fetch_object($query)) 
{
     node_delete($n->nid); 
} 

dove TO_BE_DELETED è il tipo di contenuto da eliminare.

4
Tangurena

Uso il modulo Elimina tutto , funziona perfettamente con D8 e fornisce comandi drush molto utili. Ad esempio, per eliminare tutto il contenuto del tipo di contenuto article:

drush delete-all article  
3
gerzenstl

Puoi provare Elimina tutto modulo, vai a 'admin/content/delete_content' e ti verrà presentato un modulo per la cancellazione di contenuti appartenenti a determinati tipi di contenuti.

Saluti

1
Oleg Videnov

Questo modulo viene utilizzato per eliminare tutto il contenuto e/o gli utenti da un sito. Questo è principalmente uno strumento di sviluppo, che può tornare utile in diversi casi

https://www.drupal.org/project/delete_all

così come il modulo Bulk Delete eliminerà tutti i nodi di un certo tipo di nodo usando l'API batch. Si consiglia di utilizzare il modulo Views Batch Operations (VBO) per un numero limitato di nodi. Ma se devi eliminare 10.000 nodi questo modulo potrebbe essere un'opzione migliore.

https://www.drupal.org/project/bulkdelete

0
onlink

Se hai abilitato il modulo Migrate puoi usare:

$ drush migrate-wipe <content-type>

Vedi Comandi di migrazione tipici usando Drush .

0
jiv-e

Elimina tutti i nodi del tipo di contenuto a livello di codice qui è una funzione di supporto:


function _delete_all_nodes_of_type($type = '') {
  // Return all nids of nodes of type.
  $nids = db_select('node', 'n')
    ->fields('n', array('nid'))
    ->condition('n.type', $type)
    ->execute()
    ->fetchCol(); // returns an indexed array
  if (!empty($nids)) {
    node_delete_multiple($nids);
    drupal_set_message(format_plural(count($nids), count($nids) . ' node Deleted.', count($nids) . ' nodes Deleted.'));
  }
}
0
berramou