web-dev-qa-db-fra.com

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

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 un 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?

8

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

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

6
greg_1_anderson

Enfin, je crée mon propre module nommé drush_delete

À l'intérieur de drush_delete.drush.inc fichier mettre 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 drush pour vider le cache drush et utiliser 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

7

À mon humble avis, le moyen 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
6
Pere