Alle Nodes eines Contenttyp löschen

Wie löscht man effektiv, schnell und einfach alle Nodes eines Contenttyps. Mit SQL kommt man nicht weit, da insbesondere bei CCK relativ schwer ist, zu wissen wo alle Daten stehen. Was nimmt man dann?
DELETE from {node} where type="abc"
Das löscht zwar die Existens für Drupal, aber viele Daten sind weiterhin gespeichert

Da war mir erst guter Rat teuer. Aber dann kam mir die Idee: node_delete($NID) und Views -> keinerlei SQL und flexibel


<?php
// Views Code
$view = new stdClass();
$view->name = 'deletetion';
$view->description = '';
$view->access = array (
);
$view->view_args_php = '';
$view->page = FALSE;
$view->page_title = '';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '';
$view->page_footer_format = '1';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'node';
$view->url = '';
$view->use_pager = TRUE;
$view->nodes_per_page = '10';
$view->sort = array (
);
$view->argument = array (
array (
'type' => 'nodetype',
'argdefault' => '1',
'title' => '',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array ();
$view->filter = array ();
$view->exposed_filter = array ();
$view->requires = array();

// mechanischer namen
$inhaltstyp = 'story';
// holt sich per sql alle nids
$result = views_build_view('items', $view, array($inhaltstyp), false, false);
// holt sich die nids aus dem result heraus
$items = $result['items'];
foreach ($items as $key => $item) {
$nids[] = $item->nid;
}
// zeigt nochmal alle nids
dsm($nids);

//////////////////////
// node_delete() //
// auskommentieren //
//////////////////////

foreach ($nids as $nid) {
//node_delete($nid);
}
?>
Die ersten Zeilen bauen die View, damit man nicht extra per GUI sich eine zusammenbauen muss.
$inhaltstyp definiert dann logischerweise den Inhaltstyp. Mithilfe von Views erhällt man dann alle NIDs, die man dann einfach per node_delete() löschen lässt.
-> Views ist nicht nur für die Anzeige von Daten da -> Views ist ein SQL Builder

Comments

nochmals für den Tip :)
Ist ein perfektes Beispiel wie Drupal "Werkzeuge" flexibel und effektiv eingesetzt werden können!

lg Sebastian

Währe schön gewesen auch mal genau zu beschreiben wie man das Skript einsetzt. (Standalone oder in ein PHP Feld kopieren)

Interessante Idee :) Meine Lösung sieht wie folgt aus:


$node_type = 'TYPE';

set_time_limit(0);

require 'includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$result = db_query("SELECT nid FROM {node} WHERE type = '%s'", $node_type);

while($nid = db_result($result)) {
node_delete($nid);
}

Den Code in eine Datei packen (node-bulk-delete.php) und diese ins Webroot der Drupalinstallation hochladen. TYPE einsetzen und die Datei über den Browser aufrufen.

Add new comment