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
Sebastian (not verified)
9. May 2008 - 10:16
Permalink
Danke
nochmals für den Tip :)
Ist ein perfektes Beispiel wie Drupal "Werkzeuge" flexibel und effektiv eingesetzt werden können!
lg Sebastian
Anonymous (not verified)
6. July 2008 - 20:25
Permalink
Währe schön gewesen auch
Währe schön gewesen auch mal genau zu beschreiben wie man das Skript einsetzt. (Standalone oder in ein PHP Feld kopieren)
Anonymous (not verified)
8. September 2010 - 13:56
Permalink
Interessante Idee :) Meine
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