Bagaimana cara menghapus node atau daftar node dengan Drush?

8

Saya menemukan modul Delete all yang memberi Anda kemampuan untuk menghapus semua node dari jenis konten yang diberikan. Namun, dengan modul ini Anda tidak dapat menghapus satu node atau daftar node.

Dalam pertanyaan " Bisakah saya menghapus node dari jenis konten yang diberikan dengan Drush? " Saya menemukan 2 jawaban berbicara tentang perintah drush node_delete <nid>tetapi saya tidak dapat menemukan perintah ini.

Saya menemukan dalam diskusi tentang node_delete () beberapa kode menggunakan eval untuk menyelesaikan tugas ini, tetapi menggunakan eval:

drush php-eval "global \$user; \$user = user_load(1); node_delete(nid);"

Jika tidak ada fungsi yang diimplementasikan untuk mencapai hal ini, apa cara yang lebih baik untuk mengimplementasikan fungsi ini: dalam modul Drush atau buat modul baru?

Adrian Cid Almaguer
sumber

Jawaban:

6

Jika Anda menggunakan modul Drush Entity , maka Anda dapat menjalankan drush entity-delete node 123untuk menghapus nid 123 dari situs Anda.

EDIT: Jika seseorang perlu menggunakan drush entity-deleteperintah, harus menggunakan versi dev dari modul: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev

greg_1_anderson
sumber
terima kasih greg, Anda selalu membantu dengan barang-barang yang memabukkan ;-)
Adrian Cid Almaguer
Saya menemukan bug di dalam modul entitas drush yang tidak mengizinkan penghapusan node, saya akan melakukan patch nanti.
Adrian Cid Almaguer
1
Anda dapat menemukan masalah dan tambalan di drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer
Patch dikirimkan, jika seseorang perlu menggunakan drush entity-deleteperintah harus menggunakan saat ini versi dev dari modul Drush Entity drupal.org/project/drush_entity/releases/7.x-5.x-dev
Adrian Cid Almaguer
7

Akhirnya saya membuat modul saya sendiri bernama drush_delete

Di dalam drush_delete.drush.incfile letakkan kode ini:

<?php
/**
 * @file
 * The Drush Delete drush commands.
 */

/**
* Implements hook_drush_command().
*/
function drush_delete_drush_command() {
  $items['node-delete'] = array(
    'description' => dt("Delete nodes."),
    'aliases' => array('nd'),
    'arguments' => array(
      'nids' => dt('The nids of the nodes to delete'),
    ),
    'examples' => array(
      'drush node-delete 1' => dt('Delete the node with nid = 1.'),
      'drush node-delete 1 2 3' => dt('Delete the nodes with nid = 1, 2 and 3.'),

    ),
  );
  return $items;
}

/**
 * Callback for the node-delete command
 */
function drush_drush_delete_node_delete() {
  $nids = func_get_args();
  $nids = array_filter($nids, 'is_numeric');
  $nids = array_map('intval', $nids);
  $nids = array_unique($nids);
  $nids = array_values($nids);
  $cant = count($nids);

  if ($cant > 0) {
    node_delete_multiple($nids);

    drush_print(dt("Deleted nodes:"));
    drush_print(implode(' ', $nids));
  }
  else {
    drush_set_error('DRUSH_ERROR_CODE', dt("You must enter at least one nid"));
  }
}

Instal modul, jalankan drush cc drushuntuk menghapus cache drush dan gunakan perintah seperti ini:

Untuk menghapus simpul gunakan:

drush node-delete 1
drush nd 1

Untuk menghapus beberapa node gunakan:

drush node-delete 1 2 3
drush nd 1 2 3

Anda dapat menemukan perintah di modul ini:

https://github.com/adrian-cid/drush_commands

Adrian Cid Almaguer
sumber
6

IMHO cara termudah adalah dengan php-eval:

drush php-eval "node_delete_multiple(array(NODE_ID));"

...

drush php-eval "node_delete_multiple(array(34));"     // for node/34

drush php-eval "node_delete_multiple(array(34, 35));" // for node ids 34 and 35
Pere
sumber
Terima kasih, tapi saya pikir jika Anda memiliki perintah drush, Anda dapat menambahkan argumen dan opsi yang mungkin diperlukan. Dan Anda dapat menambahkan validasi dengan cara yang mudah.
Adrian Cid Almaguer
Saya suka jawaban ini. Tidak perlu perintah drush khusus.
Johnathan Elmore