Làm cách nào để xóa một nút hoặc danh sách các nút bằng Drush?


8

Tôi phát hiện ra mô-đun Xóa tất cả cung cấp cho bạn khả năng xóa tất cả các nút của một loại nội dung nhất định. Tuy nhiên, với mô-đun này, bạn không thể xóa một nút hoặc danh sách các nút.

Trong câu hỏi " Tôi có thể xóa các nút của một loại nội dung nhất định bằng Drush không? " Tôi đã tìm thấy 2 câu trả lời nói về lệnh drush node_delete <nid>nhưng tôi không thể tìm thấy lệnh này.

Tôi đã tìm thấy trong một cuộc thảo luận về node_delete () một số mã sử dụng eval để thực hiện nhiệm vụ này, nhưng nó đang sử dụng eval:

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

Trong trường hợp không tồn tại một chức năng được triển khai để thực hiện điều này, cách tốt hơn để thực hiện chức năng này là gì: trong mô-đun Drush hoặc tạo mô-đun mới?

Câu trả lời:


6

Nếu bạn sử dụng mô-đun Drush Entity , thì bạn có thể chạy drush entity-delete node 123để xóa nid 123 khỏi trang web của mình.

EDIT: Nếu ai đó cần sử dụng drush entity-deletelệnh, nên sử dụng phiên bản dev của mô-đun: https://www.drupal.org/project/drush_entity/release/7.x-5.x-dev


cảm ơn greg, bạn luôn luôn giúp đỡ với những thứ đáng sợ ;-)
Adrian Cid Almaguer

Tôi đã tìm thấy một lỗi bên trong mô-đun thực thể drush không cho phép xóa các nút, tôi sẽ cam kết bản vá sau.
Adrian Cid Almaguer

1
Bạn có thể tìm thấy sự cố và bản vá trong drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer

Bản vá đã được gửi, nếu ai đó cần sử dụng drush entity-deletelệnh thì nên sử dụng tại thời điểm này phiên bản dev của mô-đun Drush Entity drupal.org/project/drush_entity/release/7.x-5.x-dev
Adrian Cid Almaguer

7

Cuối cùng tôi tạo mô-đun của riêng mình có tên drush_delete

Trong drush_delete.drush.inctập tin đặt mã này:

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

Cài đặt mô-đun, chạy drush cc drushđể xóa bộ đệm ẩn và sử dụng lệnh như thế này:

Để xóa một nút sử dụng:

drush node-delete 1
drush nd 1

Để xóa nhiều nút sử dụng:

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

Bạn có thể tìm thấy lệnh trong mô-đun này:

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


6

IMHO cách dễ nhất là với 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

Cảm ơn, nhưng tôi nghĩ rằng nếu bạn có một lệnh drush, bạn có thể thêm các đối số và tùy chọn có thể cần thiết. Và bạn có thể thêm xác nhận một cách dễ dàng.
Adrian Cid Almaguer

Tôi thích câu trả lời này. Không có lệnh drush tùy chỉnh cần thiết.
Johnathan Elmore
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.