J'ai plusieurs milliers de nœuds d'un type de contenu particulier. En utilisant l'interface Web (example.com/admin/content), je ne peux en supprimer qu'une cinquantaine à la fois. Comment puis-je les supprimer rapidement?
Il existe un module pour cela (TM).
Voir Suppression en masse .
Cela utilisera l'API Batch pour supprimer les nœuds afin d'éviter les problèmes de dépassement de délai ou de mémoire lors de la suppression de milliers de nœuds avec un seul appel à node_delete_multiple ().
La suppression en bloc est un module abandonné. Voir pour les alternatives:
En regardant le module Devel Generate pour l'inspiration, voici sa fonction "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)))); } }
J'essaierais donc d'utiliser Devel Generate pour supprimer tous les nœuds mais n'en créer aucun, ou utiliser example.com/devel/php pour appeler devel_generate_content_kill(array('node_types' => array('my_node_type')));
directement.
Dans Drupal 8 dans un sens, utilisez la méthode entityQuery () avec la méthode 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);
Si vous devez appliquer d'autres filtres/conditions, vous pouvez consulter la page d'interface QueryInterface
[~ # ~] modifier [~ # ~] (Autre manière, grâce à @ 4k4 ):
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
Si vous souhaitez tester le code, vous pouvez utiliser:
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
Cela supprimera tous vos articles.
Si vous souhaitez le faire uniquement via l'interface utilisateur, vous pouvez utiliser le module devel_generate.
De cette façon, aucun nœud ne sera généré et tous les nœuds des types sélectionnés seront supprimés.
Vous pouvez le faire dans Drupal 7 en utilisant la partie Execute PHP Code du module Devel en entrant:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Créez un fichier avec le code ci-dessous à la racine de drupal et exécutez le fichier.
<?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);
}
?>
Faites-le dans le terminal, si vous utilisez Drush et le module supprimer tout :
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 Bulk operations fournit un écran d'administration de nœud configurable et activé par BatchAPI qui permet de filtrer par type, de sélectionner tous les nœuds correspondant à vos critères de recherche, etc.
C'est ma solution manuelle dans Drupal 6 - en plus de la suppression par lots, vous pouvez modifier en masse les nœuds et faire un tas d'autres choses.
Il semble que la version Drupal 7 n'est pas encore prête - mais je regarderais ce module pour une version D7.
Avec le module Devel, en utilisant drush:
drush genc 0 --types=article --kill
Ou dans l'interface utilisateur comme expliqué ici: http://befused.com/drupal/delete-nodes-devel
Un autre extrait est:
$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);
}
où TO_BE_DELETED
est le type de contenu à supprimer.
J'utilise le module Delete all , il fonctionne très bien avec D8 et fournit des commandes drush très utiles. Par exemple, pour supprimer tout le contenu du type de contenu article
:
drush delete-all article
Vous pouvez essayer le module Supprimer tout , accédez à 'admin/content/delete_content' et un formulaire de suppression de contenu appartenant à certains types de contenu vous sera présenté.
Cordialement
Ce module est utilisé pour supprimer tout le contenu et/ou les utilisateurs d'un site. Il s'agit principalement d'un outil de développement, qui peut être utile dans plusieurs cas
https://www.drupal.org/project/delete_all
comme le module Bulk Delete supprimera tous les nœuds d'un certain type de nœud à l'aide de l'API par lots. Il est conseillé d'utiliser le module Views Batch Operations (VBO) pour un petit nombre de nœuds. Mais si vous devez supprimer 10 000 nœuds, ce module pourrait être une meilleure option.
Si le module Migrate est activé, vous pouvez utiliser:
$ drush migrate-wipe <content-type>
Supprimez tous les nœuds de type de contenu par programme voici une fonction d'aide:
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.'));
}
}