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.