Jawaban:
Ada modul untuk itu (TM).
Lihat Penghapusan Massal .
Itu akan menggunakan Batch API untuk menghapus node untuk menghindari masalah timeout atau memori ketika menghapus ribuan node dengan satu panggilan ke node_delete_multiple ().
Hapus Massal adalah modul yang ditinggalkan. Lihat alternatifnya:
Melihat modul Devel Generate untuk mendapatkan inspirasi, inilah fungsinya "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)))); } }
Jadi saya akan mencoba menggunakan Devel Generate untuk menghapus semua node tetapi tidak membuat yang baru, atau menggunakan example.com/devel/php untuk menelepon devel_generate_content_kill(array('node_types' => array('my_node_type')));
langsung.
Dalam Drupal 8 salah satu caranya adalah menggunakan metode entityQuery () dengan metode 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);
Jika Anda perlu menerapkan filter / ketentuan lain, Anda dapat memeriksa halaman antarmuka QueryInterface
EDIT (Cara lain, terima kasih kepada @ 4k4 ):
$storage_handler = \Drupal::entityTypeManager()->getStorage("node");
$entities = $storage_handler->loadByProperties(["type" => "YOUR_CONTENT_TYPE_NAME"]);
$storage_handler->delete($entities);
Jika Anda ingin menguji kode, Anda dapat menggunakan:
drush php-eval '$storage_handler = \Drupal::entityTypeManager()->getStorage("node"); $entities = $storage_handler->loadByProperties(["type" => "article"]); $storage_handler->delete($entities);'
Ini akan menghapus semua artikel Anda.
$entities = $storage_handler->loadByProperties(['type' => 'YOUR_CONTENT_TYPE_NAME']);
entityQuery
Anda harus mengatur accessCheck
pada pernyataan. Kalau tidak, jika Anda menjalankannya dalam drush, secara default accessCheck diatur ke true dan setiap node yang tidak memiliki akses ke 0 tidak akan dikembalikan.
Jika Anda ingin melakukannya murni melalui UI, Anda dapat menggunakan modul devel_generate.
Dengan cara ini, tidak ada node yang akan dihasilkan dan semua node dari tipe yang dipilih akan dihapus.
Buat file dengan kode di bawah ini di root instalasi drupal dan jalankan file.
<?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);
}
?>
Anda dapat melakukannya di Drupal 7 menggunakan bagian Execute PHP Code dari modul Devel dengan memasukkan:
$result= db_query("SELECT nid FROM {node} AS n WHERE n.type = 'TYPE'");
foreach ($result as $record) {
node_delete($record->nid);
}
Lakukan ini di terminal, jika Anda menggunakan Drush dan hapus semua modul:
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
Operasi Tampilan Massal menyediakan layar admin BatchAPI yang diaktifkan dan dapat dikonfigurasi yang memungkinkan pemfilteran menurut jenis, pemilihan semua node yang cocok dengan kriteria pencarian Anda, dll.
Itu solusi mudah saya di Drupal 6 - selain menghapus batch, Anda dapat mengedit secara massal node dan melakukan banyak hal lainnya.
Sepertinya versi Drupal 7 belum siap - tapi saya akan menonton modul untuk rilis D7.
Cuplikan lainnya adalah:
$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);
}
di mana TO_BE_DELETED
jenis konten yang akan dihapus.
db_delete('node')
Dengan modul Devel, gunakan drush:
drush genc 0 --types=article --kill
Atau di UI seperti yang dijelaskan di sini: http://befused.com/drupal/delete-nodes-devel
devel_generate
yang perlu diaktifkan. Dan untuk banyak tipedrush genc 0 --kill --types="article, page"
Saya menggunakan Delete all module, berfungsi baik dengan D8 dan memberikan perintah drush yang sangat berguna. Misalnya, untuk menghapus semua konten dari article
jenis konten:
drush delete-all article
Anda dapat mencoba Hapus semua modul, navigasikan ke 'admin / konten / delete_content' dan Anda akan diberikan formulir untuk menghapus konten milik jenis konten tertentu.
Salam
Jika Anda telah mengaktifkan modul Migrasi, Anda dapat menggunakan:
$ drush migrate-wipe <content-type>
Modul ini digunakan untuk menghapus semua konten dan / atau pengguna dari suatu situs. Ini terutama alat pengembang, yang dapat berguna dalam beberapa kasus
https://www.drupal.org/project/delete_all
seperti akan sebagai modul Hapus Massal akan menghapus node dari tipe-simpul tertentu menggunakan api batch. Disarankan untuk menggunakan modul Views Batch Operations (VBO) untuk sejumlah kecil node. Tetapi jika Anda harus menghapus 10.000 node modul ini mungkin merupakan opsi yang lebih baik.
Hapus semua node tipe konten secara terprogram di sini adalah fungsi pembantu:
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.'));
}
}
Saya akhirnya menggunakan db_delete , tidak perlu modul:
<?php
db_delete('node')
->condition('type', 'MY_CONTENT_TYPE')
->execute();
?>
Sunting / Peringatan: Lihat komentar Berdir di bawah ini. Metode ini tidak membersihkan semua data yang terkait dengan node.
Jika Anda tidak ingin cod, Anda dapat mencoba modul ini, https://drupal.org/project/total_control
Cukup buka Dasbor -> Konten, pilih semua konten (Anda dapat memfilter menurut jenis konten), lalu pilih "Hapus item"