Як видалити вузол або список вузлів за допомогою 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щоб видалити nid 123 зі свого сайту.

EDIT: Якщо комусь потрібно використовувати drush entity-deleteкоманду, слід використовувати версію модуля dev: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


спасибі Грег, ти завжди допомагаєш з барабанниками ;-)
Адріан Сид Альмагюр

Я знайшов помилку всередині модуля "drush", який не дозволяє видалити вузли, я зроблю виправлення пізніше.
Адріан Сид Альмагюр

1
Ви можете знайти проблему та виправлення на сайті drupal.org/node/2756071#comment-11339679
Адріан Сид Альмагюр,

Патч був представлений, якщо хто - то необхідно використовувати drush entity-deleteкоманду слід використовувати в даний момент версії Dev з модуля Drush Entity drupal.org/project/drush_entity/releases/7.x-5.x-dev
Адріан Cid Альмагер

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 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, ви можете додавати аргументи та параметри, які, можливо, потрібні. І ви можете додати перевірки простим способом.
Адріан Сид Альмагюр

Я люблю цю відповідь. Не потрібна спеціальна команда друку.
Джоннатан Елмор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.