วิธีการลบโหนดหรือรายการโหนดด้วย Drush


8

ฉันค้นพบโมดูลลบทั้งหมดที่ให้ความสามารถในการลบโหนดทั้งหมดของประเภทเนื้อหาที่กำหนด อย่างไรก็ตามด้วยโมดูลนี้คุณไม่สามารถลบโหนดเดียวหรือรายการโหนด

ในคำถาม " ฉันจะลบโหนดของประเภทเนื้อหาที่กำหนดด้วย Drush ได้หรือไม่ " ฉันพบ 2 คำตอบที่พูดถึงคำสั่งdrush node_delete <nid>แต่ฉันไม่พบคำสั่งนี้

ฉันพบในการสนทนาเกี่ยวกับ node_delete ()บางรหัสใช้ eval เพื่อให้งานนี้สำเร็จ แต่ใช้ eval:

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

ในกรณีที่ไม่มีฟังก์ชั่นการใช้งานที่จะทำให้สำเร็จสิ่งที่เป็นวิธีที่ดีกว่าในการใช้ฟังก์ชั่นนี้: ในโมดูลDrushหรือสร้างโมดูลใหม่

คำตอบ:


6

หากคุณใช้โมดูล Drush Entityคุณสามารถเรียกใช้drush entity-delete node 123เพื่อลบหมายเลข 123 ออกจากไซต์ของคุณ

แก้ไข:ถ้าใครบางคนจำเป็นต้องใช้drush entity-deleteคำสั่งควรใช้รุ่น dev ของโมดูล: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


ขอบคุณ greg คุณช่วยเสมอกับสิ่งที่น่าเบื่อ ;-)
Adrian Cid Almaguer

ฉันพบข้อผิดพลาดภายในโมดูลเอนทิตี drush ที่ไม่อนุญาตให้ลบโหนดฉันจะส่งปะแก้ในภายหลัง
Adrian Cid Almaguer

1
คุณสามารถพบปัญหาและแก้ไขได้ที่drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer

หากมีคนต้องการใช้drush entity-deleteคำสั่งควรใช้โปรแกรมปรับปรุงในขณะนี้รุ่น dev ของโมดูลDrush
Adrian Cid Almaguer

7

ในที่สุดฉันก็สร้างโมดูลของตัวเองชื่อ drush_delete

ภายในdrush_delete.drush.incไฟล์ให้ใส่รหัสนี้:

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

ติดตั้งโมดูลรันdrush cc drushเพื่อล้างแคช drush และใช้คำสั่งดังนี้:

ในการลบโหนดให้ใช้:

drush node-delete 1
drush nd 1

หากต้องการลบหลายโหนดให้ใช้:

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

คุณสามารถพบคำสั่งในโมดูลนี้:

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


6

IMHO วิธีที่ง่ายที่สุดคือ 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

ขอบคุณ แต่ฉันคิดว่าถ้าคุณมีคำสั่ง drush คุณสามารถเพิ่มอาร์กิวเมนต์และตัวเลือกที่จำเป็น และคุณสามารถเพิ่มการตรวจสอบในวิธีที่ง่าย
Adrian Cid Almaguer

ฉันรักคำตอบนี้ ไม่จำเป็นต้องใช้คำสั่ง drush
Johnathan Elmore
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.