Risposte:
C'è un modulo per quello (TM).
Vedi Eliminazione collettiva .
Questo 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:
Osservando il modulo Devel Generate come fonte di ispirazione, ecco la sua funzione "uccisione dei contenuti" 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 a utilizzare Develop Generate per eliminare tutti i nodi ma non crearne di nuovi, oppure utilizzare example.com/devel/php per chiamare devel_generate_content_kill(array('node_types' => array('my_node_type')));
direttamente.
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
MODIFICA ( Altrimenti , 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.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
è necessario impostare accessCheck
l'istruzione on. Altrimenti se lo si esegue in modalità Drush, per impostazione predefinita accessCheck è impostato su true e tutti i nodi a cui uid 0 non ha accesso non verranno restituiti.
Se si desidera farlo esclusivamente tramite l'interfaccia utente, è possibile utilizzare il modulo devel_generate.
In questo modo, non verranno generati nodi e verranno eliminati tutti i nodi dei tipi selezionati.
Crea un file con il codice seguente nella radice dell'installazione 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);
}
?>
Puoi farlo in Drupal 7 usando la parte Execute PHP Code 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);
}
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
Views Operazioni collettive fornisce una schermata di amministrazione del nodo configurabile abilitata per BatchAPI che consente il filtraggio per tipo, la 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 in blocco i nodi e fare un sacco di altre cose.
Sembra che la versione di Drupal 7 non sia ancora pronta, ma guarderei quel modulo per una versione D7.
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 si TO_BE_DELETED
trova il tipo di contenuto da eliminare.
db_delete('node')
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
devel_generate
che deve essere abilitato. E per più tipi èdrush genc 0 --kill --types="article, page"
Uso Elimina tutto il modulo, funziona perfettamente con D8 e fornisce comandi drush molto utili. Ad esempio, per eliminare tutto il contenuto del article
tipo di contenuto:
drush delete-all article
Puoi provare Elimina tutto il modulo, vai a 'admin / content / delete_content' e ti verrà presentato un modulo per la cancellazione del contenuto appartenente a determinati tipi di contenuto.
Saluti
Se hai abilitato il modulo Migrate puoi usare:
$ drush migrate-wipe <content-type>
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.
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.'));
}
}
Ho finito con db_delete , nessun modulo richiesto:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Modifica / Avviso: vedi il commento di Berdir di seguito. Questo metodo non cancella tutti i dati relativi ai nodi.
Se non vuoi codificare, puoi provare questo modulo, https://drupal.org/project/total_control
Vai su Dashboard -> Contenuto, seleziona tutto il contenuto (puoi filtrare per tipo di contenuto), quindi seleziona "Elimina elemento"