¿Cómo eliminar un nodo o una lista de nodos con Drush?


8

Descubrí el módulo Eliminar todo , que le permite eliminar todos los nodos de un tipo de contenido determinado. Sin embargo, con este módulo no puede eliminar un solo nodo o una lista de nodos.

En la pregunta " ¿Puedo eliminar nodos de un tipo de contenido dado con Drush? " Encontré 2 respuestas hablando sobre el comando, drush node_delete <nid>pero no puedo encontrar este comando.

En una discusión sobre node_delete () encontré un código que usa eval para realizar esta tarea, pero usa eval:

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

En caso de que no exista una funcionalidad implementada para lograr esto, ¿cuál es la mejor manera de implementar esta funcionalidad: en el módulo Drush o crear un nuevo módulo?

Respuestas:


6

Si usa el módulo Drush Entity , puede ejecutar drush entity-delete node 123para eliminar el nid 123 de su sitio.

EDITAR: si alguien necesita usar el drush entity-deletecomando, debe usar la versión de desarrollo del módulo: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


gracias Greg, siempre estás ayudando con las cosas drush ;-)
Adrian Cid Almaguer

Encontré un error dentro del módulo de entidad drush que no permite la eliminación de nodos, enviaré el parche más tarde.
Adrian Cid Almaguer

1
Puede encontrar el problema y el parche en drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer el

Se envió el parche, si alguien necesita usar el drush entity-deletecomando debe usar en este momento la versión de desarrollo del módulo Drush Entity drupal.org/project/drush_entity/releases/7.x-5.x-dev
Adrian Cid Almaguer

7

Finalmente creo mi propio módulo llamado drush_delete

Dentro del drush_delete.drush.incarchivo pon este código:

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

Instale el módulo, ejecute drush cc drushpara borrar el caché drush y use el comando como este:

Para eliminar un nodo, use:

drush node-delete 1
drush nd 1

Para eliminar múltiples nodos use:

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

Puede encontrar el comando en este módulo:

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


6

En mi humilde opinión, la forma más fácil es 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

Gracias, pero creo que si tiene un comando drush puede agregar argumentos y opciones que tal vez sean necesarias. Y puede agregar validaciones de una manera fácil.
Adrian Cid Almaguer

Me encanta esta respuesta No se necesita un comando drush personalizado.
Johnathan Elmore
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.