Come eliminare un nodo o un elenco di nodi con Drush?


8

Ho scoperto il modulo Elimina tutto che ti dà la possibilità di eliminare tutti i nodi di un determinato tipo di contenuto. Tuttavia, con questo modulo non è possibile eliminare un singolo nodo o un elenco di nodi.

Nella domanda " Posso eliminare nodi di un determinato tipo di contenuto con Drush? " Ho trovato 2 risposte parlando del comando drush node_delete <nid>ma non riesco a trovare questo comando.

Ho trovato in una discussione su node_delete () del codice usando eval per compiere questo compito, ma sta usando eval:

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

Nel caso in cui non esista una funzionalità implementata per raggiungere questo obiettivo, qual è il modo migliore per implementare questa funzionalità: nel modulo Drush o creare un nuovo modulo?

Risposte:


6

Se si utilizza il modulo Drush Entity , è possibile eseguire drush entity-delete node 123per eliminare nid 123 dal proprio sito.

EDIT: se qualcuno ha bisogno di usare il drush entity-deletecomando, dovrebbe usare la versione dev del modulo: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


grazie Greg, stai sempre aiutando con le droghe ;-)
Adrian Cid Almaguer,

Ho trovato un bug all'interno del modulo entità drush che non consente l'eliminazione dei nodi, commetterò la patch in seguito.
Adrian Cid Almaguer,

1
Puoi trovare il problema e la patch in drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer il

La patch è stata inviata, se qualcuno ha bisogno di usare il drush entity-deletecomando dovrebbe usare in questo momento la versione dev del modulo Drush Entity drupal.org/project/drush_entity/releases/7.x-5.x-dev
Adrian Cid Almaguer

7

Finalmente creo il mio modulo chiamato drush_delete

All'interno del drush_delete.drush.incfile inserisci questo codice:

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

Installa il modulo, esegui drush cc drushper cancellare la cache del drush e usa il comando in questo modo:

Per eliminare un nodo utilizzare:

drush node-delete 1
drush nd 1

Per eliminare più nodi utilizzare:

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

Puoi trovare il comando in questo modulo:

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


6

IMHO il modo più semplice è con 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

Grazie, ma penso che se hai un comando drush puoi aggiungere argomenti e opzioni che forse sono necessarie. E puoi aggiungere validazioni in modo semplice.
Adrian Cid Almaguer,

Adoro questa risposta. Non è necessario alcun comando di trascinamento personalizzato.
Johnathan Elmore,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.