Antworten:
Dafür gibt es ein Modul (TM).
Siehe Massenlöschung .
Mit der Batch-API werden die Knoten gelöscht, um Zeitüberschreitungen oder Speicherprobleme beim Löschen Tausender Knoten mit einem einzigen Aufruf von node_delete_multiple () zu vermeiden.
Bulk Delete ist ein verlassenes Modul. Siehe für Alternativen:
Wenn Sie sich das Modul "Devel Generate" als Inspiration ansehen, finden Sie hier die Funktion "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)))); } }
Also würde ich versuchen, entweder mit Devel Generate alle Knoten zu löschen, aber keine neuen zu erstellen, oder mit example.com/devel/php devel_generate_content_kill(array('node_types' => array('my_node_type')));
direkt aufzurufen .
In Drupal 8 können Sie die entityQuery () -Methode mit der EntityStorageInterface :: delete () -Methode verwenden:
$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);
Wenn Sie andere Filter / Bedingungen anwenden müssen, können Sie die Seite QueryInterface- Schnittstelle überprüfen
BEARBEITEN ( andersrum dank @ 4k4 ):
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
Wenn Sie den Code testen möchten, können Sie Folgendes verwenden:
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
Dadurch werden alle Ihre Artikel gelöscht.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
Sie das accessCheck
in der Anweisung festlegen sollten . Andernfalls wird accessCheck standardmäßig auf true gesetzt, wenn Sie es in drush ausführen, und alle Knoten, auf die uid 0 keinen Zugriff hat, werden nicht zurückgegeben.
Wenn Sie dies nur über die Benutzeroberfläche tun möchten, können Sie das Modul devel_generate verwenden.
Auf diese Weise werden keine Knoten generiert und alle Knoten der ausgewählten Typen werden gelöscht.
Erstellen Sie eine Datei mit dem folgenden Code im Stammverzeichnis der Drupal-Installation und führen Sie die Datei aus.
<?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);
}
?>
Sie können dies in Drupal 7 mithilfe des Teils "PHP-Code ausführen" des Devel-Moduls tun, indem Sie Folgendes eingeben:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Tun Sie dies im Terminal, wenn Sie Drush verwenden und das Modul " Alle löschen" verwenden :
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
Ansichten Massenoperationen bieten einen BatchAPI-fähigen, konfigurierbaren Knotenadministrationsbildschirm, in dem Sie nach Typ filtern, alle Knoten auswählen können, die Ihren Suchkriterien entsprechen usw.
Das ist meine zweifelsfreie Lösung in Drupal 6 - neben dem Batch-Löschen können Sie Knoten in großen Mengen bearbeiten und eine Reihe anderer Aufgaben erledigen.
Es sieht so aus, als ob die Drupal 7-Version noch nicht fertig ist - aber ich würde mir dieses Modul für eine D7-Version ansehen.
Ein weiterer Ausschnitt ist:
$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);
}
Wo TO_BE_DELETED
ist der zu löschende Inhaltstyp?
db_delete('node')
Mit dem Devel-Modul mit drush:
drush genc 0 --types=article --kill
Oder in der Benutzeroberfläche wie hier erklärt: http://befused.com/drupal/delete-nodes-devel
devel_generate
, das aktiviert werden muss. Und für mehrere Typen ist esdrush genc 0 --kill --types="article, page"
Ich benutze das Delete all Modul, es funktioniert gut mit D8 und bietet sehr nützliche drush Befehle. So löschen Sie beispielsweise den gesamten Inhalt des article
Inhaltstyps:
drush delete-all article
Wenn Sie das Migrate-Modul aktiviert haben, können Sie Folgendes verwenden:
$ drush migrate-wipe <content-type>
Dieses Modul wird verwendet, um alle Inhalte und / oder Benutzer von einer Site zu löschen. Dies ist hauptsächlich ein Entwicklertool, das in mehreren Fällen nützlich sein kann
https://www.drupal.org/project/delete_all
Ebenso löscht das Bulk Delete-Modul alle Knoten eines bestimmten Knotentyps mithilfe der Batch-API. Es wird empfohlen, das Modul "Views Batch Operations" (VBO) für eine kleine Anzahl von Knoten zu verwenden. Wenn Sie jedoch 10.000 Knoten löschen müssen, ist dieses Modul möglicherweise die bessere Option.
Löschen Sie alle Knoten des Inhaltstyps programmgesteuert. Dies ist eine Hilfsfunktion:
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.'));
}
}
Am Ende habe ich db_delete verwendet , es sind keine Module erforderlich:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Bearbeiten / Warnung: Siehe Berdir's Kommentar unten. Diese Methode bereinigt nicht alle Daten, die sich auf die Knoten beziehen.
Wenn Sie nicht codieren möchten, können Sie dieses Modul unter https://drupal.org/project/total_control testen
Gehen Sie einfach zu Dashboard -> Inhalt, wählen Sie den gesamten Inhalt aus (Sie können nach Inhaltstyp filtern) und wählen Sie dann "Element löschen".