ड्रश के साथ नोड या नोड्स की सूची कैसे हटाएं?


8

मैंने सभी मॉड्यूल को हटा दिया है जो आपको किसी दिए गए सामग्री प्रकार के सभी नोड्स को हटाने की क्षमता देता है। हालाँकि, इस मॉड्यूल से आप एक नोड या नोड्स की सूची नहीं हटा सकते हैं।

प्रश्न में " क्या मैं Drush के साथ दिए गए कंटेंट टाइप के नोड्स को हटा सकता हूं? " मुझे कमांड के बारे में बात करते हुए 2 उत्तर मिले drush node_delete <nid>लेकिन मैं यह कमांड नहीं ढूंढ सकता।

मैंने इस कार्य को पूरा करने के लिए eval का उपयोग करते हुए कुछ कोड नोड_delete () के बारे में चर्चा में पाया , लेकिन यह eval का उपयोग कर रहा है:

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

इस मामले में कि इसे पूरा करने के लिए लागू की गई कार्यक्षमता मौजूद नहीं है, इस कार्यक्षमता को लागू करने का बेहतर तरीका क्या है: ड्रश मॉड्यूल या नया मॉड्यूल बनाना?

जवाबों:


6

यदि आप Drush Entity मॉड्यूल का उपयोग करते हैं , तो आप drush entity-delete node 123अपनी साइट से nid 123 को हटाने के लिए दौड़ सकते हैं ।

EDIT: यदि किसी को drush entity-deleteकमांड का उपयोग करने की आवश्यकता है , तो मॉड्यूल के देव संस्करण का उपयोग करना चाहिए: https://www.drupal.org/project/drush_entity/releases/7.x-5.x-dev


धन्यवाद greg, आप हमेशा ड्रग्स सामान के साथ मदद ;-)
एड्रियन Cid Almaguer

मुझे ड्रश इकाई मॉड्यूल के अंदर एक बग मिला जो नोड्स को हटाने की अनुमति नहीं देता है, मैं बाद में पैच को प्रतिबद्ध करूंगा।
एड्रियन सीआईडी ​​अल्मागुएर


पैच, प्रस्तुत की गई थी कि कोई उपयोग करने की आवश्यकता drush entity-deleteआदेश इस समय का उपयोग करना चाहिए Drush इकाई मॉड्यूल के देव संस्करण drupal.org/project/drush_entity/releases/7.x-5.x-dev
एड्रियन Cid Almaguer

7

अंत में मैं अपने खुद के मॉड्यूल का नाम बनाता हूं drush_delete

drush_delete.drush.incफ़ाइल के अंदर यह कोड डालें:

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

मॉड्यूल स्थापित करें, drush cc drushड्रश कैश को खाली करने के लिए चलाएं और इस तरह कमांड का उपयोग करें:

नोड उपयोग को हटाने के लिए:

drush node-delete 1
drush nd 1

कई नोड्स के उपयोग को हटाने के लिए:

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

आप इस मॉड्यूल में कमांड पा सकते हैं:

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


6

IMHO सबसे आसान तरीका 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

धन्यवाद, लेकिन मुझे लगता है कि यदि आपके पास एक ड्रश कमांड है तो आप तर्क और विकल्प जोड़ सकते हैं जो शायद आवश्यक हों। और आप एक आसान तरीके से सत्यापन जोड़ सकते हैं।
एड्रियन सिड अल्मागुएर

मुझे यह जवाब पसंद है। कोई कस्टम ड्रश कमांड की जरूरत नहीं है।
जॉनाथन एलमोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.