Réponses:
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, une façon consiste à utiliser 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
EDIT (Autre moyen, 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.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
vous devez définir la accessCheck
sur l'instruction. Sinon, si vous l'exécutez dans drush, par défaut accessCheck est défini sur true et tous les nœuds auxquels uid 0 n'a pas accès ne seront pas retournés.
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.
Créez un fichier avec le code ci-dessous à la racine de l'installation 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);
}
?>
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);
}
Pour ce faire, 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 beaucoup d'autres choses.
Il semble que la version Drupal 7 ne soit pas encore prête - mais je regarderais ce module pour une version D7.
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.
db_delete('node')
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
devel_generate
qui doit être activé. Et pour plusieurs types, c'estdrush genc 0 --kill --types="article, page"
J'utilise Supprimer tout le module, cela fonctionne bien avec D8 et fournit des commandes drush très utiles. Par exemple, pour supprimer tout le contenu du article
type de contenu:
drush delete-all article
Vous pouvez essayer Supprimer tout le module, accédez à «admin / content / delete_content» et un formulaire de suppression de contenu appartenant à certains types de contenu vous sera présenté.
Cordialement
Si le module Migrate est activé, vous pouvez utiliser:
$ drush migrate-wipe <content-type>
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
tout comme le module Bulk Delete supprimera tous les nœuds d'un certain type de nœud à l'aide de l'API batch. 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.
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.'));
}
}
J'ai fini par utiliser db_delete , aucun module requis:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Edit / Warning: Voir le commentaire de Berdir ci-dessous. Cette méthode ne nettoie pas toutes les données liées aux nœuds.
Si vous ne voulez pas coder, e vous pouvez essayer ce module, https://drupal.org/project/total_control
Allez simplement dans Dashboard -> Content, sélectionnez tout le contenu (vous pouvez filtrer par type de contenu), puis sélectionnez "Delete item"