Wie lösche ich einen Knoten oder eine Liste von Knoten mit Drush?

8

Ich habe das Modul Alle löschen entdeckt, mit dem Sie alle Knoten eines bestimmten Inhaltstyps löschen können. Mit diesem Modul können Sie jedoch keinen einzelnen Knoten oder eine Liste von Knoten löschen.

In der Frage " Kann ich Knoten eines bestimmten Inhaltstyps mit Drush löschen? " Habe ich 2 Antworten gefunden, die sich auf den Befehl beziehen,drush node_delete <nid> aber ich kann diesen Befehl nicht finden.

Ich habe in einer Diskussion über node_delete () einen Code gefunden, der eval verwendet, um diese Aufgabe auszuführen, aber er verwendet eval:

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

Falls keine dafür implementierte Funktionalität vorhanden ist, wie kann diese Funktionalität besser implementiert werden: im Drush- Modul oder beim Erstellen eines neuen Moduls?

Adrian Cid Almaguer
quelle

Antworten:

6

Wenn Sie das Drush Entity-Modul verwenden , können Sie drush entity-delete node 123nid 123 von Ihrer Site löschen.

BEARBEITEN: Wenn jemand den drush entity-deleteBefehl verwenden muss, sollte er die Entwicklungsversion des Moduls verwenden: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev

greg_1_anderson
quelle
danke greg, du hilfst immer mit den drushsachen ;-)
Adrian Cid Almaguer
Ich habe einen Fehler im Drush-Entity-Modul gefunden, der das Löschen von Knoten nicht zulässt. Ich werde den Patch später festschreiben.
Adrian Cid Almaguer
1
Sie finden das Problem und den Patch in drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer
Der Patch wurde gesendet, falls jemand, der den drush entity-deleteBefehl verwenden muss, zu diesem Zeitpunkt die Entwicklungsversion
Adrian Cid Almaguer
7

Schließlich erstelle ich mein eigenes Modul mit dem Namen drush_delete

Fügen Sie in die drush_delete.drush.incDatei diesen Code ein:

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

Installieren Sie das Modul, führen Sie es aus drush cc drush, um den Drush-Cache zu löschen, und verwenden Sie den folgenden Befehl:

So löschen Sie einen Knoten:

drush node-delete 1
drush nd 1

Um mehrere Knoten zu löschen, verwenden Sie:

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

Sie finden den Befehl in diesem Modul:

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

Adrian Cid Almaguer
quelle
6

IMHO ist der einfachste Weg mit 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
quelle
Danke, aber ich denke, wenn Sie einen Drush-Befehl haben, können Sie Argumente und Optionen hinzufügen, die möglicherweise benötigt werden. Und Sie können auf einfache Weise Validierungen hinzufügen.
Adrian Cid Almaguer
Ich liebe diese Antwort. Kein benutzerdefinierter Drush-Befehl erforderlich.
Johnathan Elmore