it-swarm-id.com

Bagaimana cara menghapus semua node dari jenis konten yang diberikan?

Saya memiliki beberapa ribu node dari jenis konten tertentu. Menggunakan antarmuka web (example.com/admin/content), saya hanya dapat menghapus sekitar 50 sekaligus. Bagaimana saya bisa menghapusnya dengan cepat?

33
Greg

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:

33
Berdir

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 memanggil devel_generate_content_kill(array('node_types' => array('my_node_type'))); secara langsung.

27
tim.plunkett

Dalam Drupal 8 satu cara 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.

19

Jika Anda ingin melakukannya murni melalui UI, Anda dapat menggunakan modul devel_generate.

  1. Arahkan ke menu "Hasilkan Konten" di "Konfigurasi" (admin/config/pengembangan/hasilkan/konten).
  2. Pilih jenis konten yang ingin Anda hapus.
  3. Pastikan kotak centang di sebelah "Hapus semua konten dalam jenis konten ini sebelum menghasilkan konten baru" dicentang.
  4. Tetapkan jumlah node yang ingin Anda hasilkan menjadi "0".

Dengan cara ini, tidak ada node yang akan dihasilkan dan semua node dari tipe yang dipilih akan dihapus.

13
areynolds

Anda dapat melakukannya di Drupal 7 menggunakan Execute PHP Bagian kode 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);
}
10
Colin Shipton

Buat file dengan kode di bawah ini di root drupal instalasi 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);
  }
?>
10
Satya

Lakukan ini di terminal, jika Anda menggunakan modul Drush dan delete all :

 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

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 itu untuk rilis D7.

5
Darren Petersen

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

4
sunzu

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); 
} 

dimana TO_BE_DELETED adalah jenis konten yang akan dihapus.

4
Tangurena

Saya menggunakan Hapus semua modul, berfungsi baik dengan D8 dan memberikan perintah drush yang sangat berguna. Misalnya, untuk menghapus semua konten article jenis konten:

drush delete-all article  
3
gerzenstl

Anda dapat mencoba Hapus semua modul, navigasikan ke 'admin/content/delete_content' dan Anda akan disajikan formulir untuk penghapusan konten milik jenis konten tertentu.

Salam

1
Oleg Videnov

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.

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

0
onlink

Jika Anda telah mengaktifkan modul Migrasi, Anda dapat menggunakan:

$ drush migrate-wipe <content-type>

Lihat Perintah migrasi biasanya menggunakan Drush .

0
jiv-e

Hapus semua simpul 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.'));
  }
}
0
berramou