Comment supprimer un nœud ou une liste de nœuds avec Drush?

8

J'ai découvert le module Supprimer tout qui vous donne la possibilité de supprimer tous les nœuds d'un type de contenu donné. Cependant, avec ce module, vous ne pouvez pas supprimer un seul nœud ou une liste de nœuds.

Dans la question " Puis-je supprimer des nœuds d'un type de contenu donné avec Drush? " J'ai trouvé 2 réponses parlant de la commande drush node_delete <nid>mais je ne trouve pas cette commande.

J'ai trouvé dans une discussion sur node_delete () du code utilisant eval pour accomplir cette tâche, mais il utilise eval:

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

Dans le cas où il n'existe pas de fonctionnalité implémentée pour accomplir cela, quelle est la meilleure façon d'implémenter cette fonctionnalité: dans le module Drush ou créer un nouveau module?

Adrian Cid Almaguer
la source

Réponses:

6

Si vous utilisez le module Drush Entity , vous pouvez exécuter drush entity-delete node 123pour supprimer le nid 123 de votre site.

EDIT: Si quelqu'un a besoin d'utiliser la drush entity-deletecommande, doit utiliser la version de développement du module: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev

greg_1_anderson
la source
merci Greg, vous aidez toujours avec les trucs drush ;-)
Adrian Cid Almaguer
J'ai trouvé un bogue dans le module d'entité drush qui ne permet pas la suppression de nœuds, je vais valider le patch plus tard.
Adrian Cid Almaguer
1
Vous pouvez trouver le problème et le patch sur drupal.org/node/2756071#comment-11339679
Adrian Cid Almaguer
Le correctif a été soumis, si quelqu'un a besoin d'utiliser la drush entity-deletecommande doit utiliser à ce moment la version dev du module Drush
Adrian Cid Almaguer
7

Enfin je crée mon propre module nommé drush_delete

A l'intérieur du drush_delete.drush.incfichier mettez ce code:

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

Installez le module, exécutez drush cc drushpour effacer le cache drush et utilisez la commande comme ceci:

Pour supprimer un nœud, utilisez:

drush node-delete 1
drush nd 1

Pour supprimer plusieurs nœuds, utilisez:

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

Vous pouvez trouver la commande dans ce module:

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

Adrian Cid Almaguer
la source
6

À mon humble avis, le plus simple est avec 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
la source
Merci, mais je pense que si vous avez une commande drush, vous pouvez ajouter des arguments et des options qui sont peut-être nécessaires. Et vous pouvez facilement ajouter des validations.
Adrian Cid Almaguer
J'adore cette réponse. Aucune commande drush personnalisée n'est requise.
Johnathan Elmore