it-swarm.com.de

Wie lösche ich alle Knoten eines bestimmten Inhaltstyps?

Ich habe mehrere tausend Knoten eines bestimmten Inhaltstyps. Über die Weboberfläche (example.com/admin/content) kann ich jeweils nur etwa 50 löschen. Wie kann ich sie schnell löschen?

33
Greg

Dafür gibt es ein Modul (TM).

Siehe Massenlöschung .

Dadurch wird die Stapel-API zum Löschen der Knoten verwendet, um Zeitüberschreitungen oder Speicherprobleme beim Löschen von Tausenden von Knoten mit einem einzigen Aufruf von node_delete_multiple () zu vermeiden.

Bulk Delete ist ein verlassenes Modul. Siehe für Alternativen:

33
Berdir

Wenn Sie sich das Devel Generate-Modul 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))));
  }
}

Daher 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 aufrufen.

27
tim.plunkett

In Drupal 8) verwenden Sie unter anderem die Methode entityQuery () mit der Methode 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);

Wenn Sie andere Filter/Bedingungen anwenden müssen, können Sie die Seite QueryInterface Schnittstelle überprüfen

[~ # ~] edit [~ # ~] (Anders 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.

19

Wenn Sie dies nur über die Benutzeroberfläche tun möchten, können Sie das Modul devel_generate verwenden.

  1. Navigieren Sie unter "Konfiguration" zum Menü "Inhalt generieren" (admin/config/development/generate/content).
  2. Wählen Sie die Inhaltstypen aus, die Sie löschen möchten.
  3. Stellen Sie sicher, dass das Kontrollkästchen neben "Alle Inhalte in diesen Inhaltstypen löschen, bevor neue Inhalte generiert werden" aktiviert ist.
  4. Setzen Sie die Anzahl der Knoten, die Sie generieren möchten, auf "0".

Auf diese Weise werden keine Knoten generiert und alle Knoten der ausgewählten Typen werden gelöscht.

13
areynolds

Sie können dies in Drupal 7 mit dem Execute PHP Code-Teil 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);
}
10
Colin Shipton

Erstellen Sie eine Datei mit dem folgenden Code im Stammverzeichnis von 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);
  }
?>
10
Satya

Tun Sie dies im Terminal, wenn Sie Drush 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
8
shrish

Ansichten Massenvorgänge bieten einen BatchAPI-fähigen, konfigurierbaren Knotenverwaltungsbildschirm, auf 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 Dinge erledigen.

Es sieht so aus, als ob die Version Drupal 7 noch nicht fertig ist - aber ich würde mir dieses Modul für eine D7-Version ansehen.

5
Darren Petersen

Mit dem Devel-Modul mit Drush:

drush genc 0 --types=article --kill

Oder in der Benutzeroberfläche, wie hier erläutert: http://befused.com/drupal/delete-nodes-devel

4
sunzu

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.

4
Tangurena

Ich benutze das Modul Alle löschen , es funktioniert gut mit D8 und bietet sehr nützliche Drush-Befehle. So löschen Sie beispielsweise den gesamten Inhalt des Inhaltstyps article:

drush delete-all article  
3
gerzenstl

Sie können das Modul Alle löschen ausprobieren, zu 'admin/content/delete_content' navigieren und erhalten ein Formular zum Löschen von Inhalten, die zu bestimmten Inhaltstypen gehören.

Grüße

1
Oleg Videnov

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 wie das Bulk Delete-Modul alle Knoten eines bestimmten Knotentyps mithilfe der Batch-API löscht. Es wird empfohlen, das Views Batch Operations-Modul (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.

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

0
onlink

Wenn Sie das Migrationsmodul aktiviert haben, können Sie Folgendes verwenden:

$ drush migrate-wipe <content-type>

Siehe Typische Migrationsbefehle mit Drush .

0
jiv-e

Alle Knoten des Inhaltstyps programmgesteuert löschen ist hier 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.'));
  }
}
0
berramou