Drush ile bir düğümü veya düğüm listesini nasıl silebilirim?


8

Belirli bir içerik türünün tüm düğümlerini silme olanağı sağlayan Tümünü sil modülünü keşfettim . Ancak, bu modülle tek bir düğümü veya düğüm listesini silemezsiniz.

Sorusuna ise " Ben? Drush ile verilen bir içerik türü düğümleri silebilir ben komuta bahsediyor 2 cevaplar buldum" drush node_delete <nid>ama bu komutu bulamıyorum.

Bu görevi gerçekleştirmek için eval kullanarak bazı kod node_delete () hakkında bir tartışmada buldum , ancak eval kullanıyor:

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

Bunu gerçekleştirmek için uygulanan bir işlevsellik yoksa, bu işlevselliği uygulamanın en iyi yolu nedir: Drush modülünde veya yeni bir modül oluşturmak?

Yanıtlar:


6

Drush Entity modülünü kullanırsanız, drush entity-delete node 123nid 123'ü sitenizden silmeye çalışabilirsiniz .

EDIT: Birisinin drush entity-deletekomutu kullanması gerekiyorsa , modülün dev sürümünü kullanmalıdır: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


teşekkürler greg, sen her zaman drush maddeleri ile yardım ;-)
Adrian Cid Almaguer

Düğümlerin silinmesine izin vermeyen drush varlık modülünün içinde bir hata buldum, yamayı daha sonra yapacağım.
Adrian Cid Almaguer


Yama, birisinin drush entity-deletekomutu kullanması gerekiyorsa, şu anda Drush Entity modülünün dev sürümünü kullanması gerekiyorsa drupal.org/project/drush_entity/releases/7.x-5.x-dev
Adrian Cid Almaguer

7

Sonunda kendi modülümü oluşturuyorum drush_delete

İçinde drush_delete.drush.incdosyasında bu kodu koyun:

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

Modülü kurun, drush cc drushdrush önbelleğini temizlemek için çalıştırın ve komutu aşağıdaki gibi kullanın:

Bir düğümü silmek için şunu kullanın:

drush node-delete 1
drush nd 1

Birden fazla düğümü silmek için şunu kullanın:

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

Komutu bu modülde bulabilirsiniz:

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


6

IMHO en kolay yolu php-eval ile:

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

Teşekkürler, ancak bence bir drush komutunuz varsa, belki gerekli olan argümanları ve seçenekleri ekleyebilirsiniz. Ve kolay bir şekilde doğrulama ekleyebilirsiniz.
Adrian Cid Almaguer

Bu cevabı seviyorum. Özel bir drush komutu gerekmez.
Johnathan Elmore
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.