क्या मैं Drush के साथ दिए गए कंटेंट टाइप के नोड्स को हटा सकता हूं?


13

बस सोच रहा था कि क्या ड्रश किसी दिए गए सामग्री प्रकार के नोड्स को हटाने में सक्षम है।

कुछ इस तरह: $ drush delete-node --type=MyContentType

यदि संभव नहीं है, तो क्या मैं इस तरह की विधि बना सकता हूं ?

जवाबों:


4

आप इस प्रकार एक समारोह बना सकते हैं:

function MYMODULE_delete_all_the_things() {
  $query = new EntityFieldQuery;

  $result = $query->entityCondition('entity_type', 'node')
    ->propertyCondition('type', 'YOUR-CONTENT-TYPE')
    ->execute();

  if (isset($result['node']) && count($result['node'])) {

    $node_ids = array_keys($result['node']);

    node_delete_multiple($node_ids);
  }
}

नोट - आप एक साधारण SELECTक्वेरी का भी उपयोग कर सकते हैं , लेकिन जब आप एंटिटीज के साथ काम कर रहे हैं, तो यह देखने में अधिक समझदार / सामान्य-व्यवहार लगता है

यह तर्क बदलने या जोड़ने के लिए भी काफी आसान होना चाहिए। आप इसे एक ड्रश कमांड में भी आसानी से डाल सकते हैं - ड्रश रिपॉजिटरी में यह कैसे करें (नीचे के पास कमांड्स सेक्शन की जाँच करें) के लिए एक उदाहरण है ।


मैं देख रहा हूं, यह लगता है कि रिपॉजिटरी लिंक से पता चलता है कि ड्रश पद्धति को कैसे ठीक से जोड़ना है।
शेफेलोन

हाँ! रीडमी के पास कुछ अलग तरीके हैं जिन्हें आप उन्हें भी लागू कर सकते हैं!
चपबाबू

21

Devel मॉड्यूल स्थापित करें, और सभी नोड्स को हटाने के लिए ड्रश का उपयोग करें,

$  drush genc --kill 0 0 

आप एक प्रकार का विकल्प भी दे सकते हैं,

$  drush genc --kill --types=article 0 0

चतुर, मुझे यह पसंद है।
m4olivei

3
यह D8 के साथ काम करता है। devel_generateमॉड्यूल devel के साथ शामिल है, लेकिन जरूरतों के साथ सक्षम करने की drush en devel_generate Genc सामान्य रूप से करने के लिए प्रयोग किया जाता है बनाने , नोड्स तो अंत में 0 0 कुछ भी नया बनाने के लिए नहीं यह कह रहा है, और --kill क्या पहले से ही वहाँ है हटाने के लिए।
विलियम टरेल

15

मुझे लगता है कि आप नीचे दिए गए आदेश का उपयोग करके कर सकते हैं

drush node_delete <nid>

EDIT: एक मॉड्यूल मिला जो कुछ करता है / प्रश्न से संबंधित है

http://drupal.org/project/delete_all

प्रयोग

Drush

drush delete-all

उदाहरण: drush delete-all article


मेरा मतलब कंटेंट टाइप करके सभी नोड्स को डिलीट करना था।
शेफेलोन

क्या आपने इस मॉड्यूल को drupal.org/project/delete_all उपयोग करने का प्रयास किया, ड्रश ड्रश डिलीट-ऑल उदाहरण: ड्रश डिलीट-ऑल आर्टिकल
ninjascorner

जहां मैं drush node_delete <nid> कमांड पा सकता हूं?
एड्रियन सीआईडी ​​अल्मागुएर

लोगों का समय बचाने के लिए, दिसंबर 2016 delete_all तक , ड्रुपल 8 के लिए अभी तक पोर्ट नहीं किया गया है , लेकिन genc उत्तर काम करता है।
विलियम टरेल


5

कुछ इस तरह से काम करेगा (अप्राप्त):

$query = new EntityFieldQuery();

$entities = $query->entityCondition('entity_type', 'node', '=')
  ->entityCondition('bundle', 'Announcements')
  ->execute();

$nids = array_keys($entities['node']);

node_delete_multiple($nids);

यह सभी प्रकार के नोड्स Annoucementsका उपयोग करके सामग्री प्रकार के साथ मिलेगा EntityFieldQuery()। यह तब $nidsपरिणाम से सभी प्राप्त करता है, और उनका उपयोग करके हटा दिया जाता है node_delete_multiple()

आप इस कोड को ले सकते हैं, इसे एक अलग PHP फ़ाइल में रख सकते हैं, और फिर इसके साथ निष्पादित कर सकते हैं drush scr

एपीआई का उपयोग सुनिश्चित करेगा कि सभी उचित हुक आग। अन्य बातों के अलावा, वे नोड संशोधन और फ़ील्ड डेटा (और उनके संशोधन) को भी हटा देंगे ताकि आपके पास डेटाबेस में अनाथ डेटा न हो।


5

इस धागे पर कुछ अच्छे विचार हैं। यदि आप वास्तव में कोई प्रोग्रामिंग नहीं करना चाहते हैं और Drush का उपयोग करना चाहते हैं तो आप डिलीट ऑल कंट्रोल्ड मॉड्यूल को देख सकते हैं :

Drush
ड्रश डिलीट-ऑल
उदाहरण: ड्रश डिलीट-ऑल आर्टिकल

Drupal 7 संस्करण पर Drush

किसी विशिष्ट सामग्री प्रकार या उपयोगकर्ताओं के सभी नोड्स, नोड्स को हटा दें।

उदाहरण:
 drush delete-all article सभी लेख नोड्स को हटा दें।
 drush Delete-all सभी प्रकार के नोड्स हटाएँ।
 drush delete-all --reset सभी प्रकार के नोड्स को हटाएं, और नोड, संशोधन और टिप्पणी काउंटर रीसेट करें।
 drush delete-all users उपयोगकर्ता हटाएं।

विकल्प:
 नोड, संशोधन और टिप्पणी तालिकाओं के लिए - रीसेट रीसेट काउंटर।
 - भूमिकाओं उठाओ

एलियासेस: दा

4

वीबीओ में ड्रश इंटीग्रेशन है। नोड्स का VBO दृश्य बनाएं, इसे Drush (उपयोग करके drush vbo-execute) के माध्यम से निष्पादित करें , नोड प्रकार को एक तर्क के रूप में पास करें।


मुझे लगता है कि यह वही है जो मुझे चाहिए। सिर्फ 2 प्रश्न: किसी दृश्य को निष्पादित करने के लिए कौन सा तरीका है? और क्या यह विधि ब्राउज़र में दृश्य निष्पादित करने की तुलना में तेज़ होगी?
शेफेलोन

सटीक ड्रश कमांड को निर्दिष्ट करने के लिए उत्तर का संपादन किया। और हां, यह तेजी से होगा क्योंकि इस तरह से दृश्य प्रदान नहीं किया गया है।
बोजान ज़िवानोविक

1

आप एक ड्रश स्क्रिप्ट भी बना सकते हैं (मान लीजिए कि इसे "बल्क_डेलीट.फ्प" कहा जाता है और इसे ड्रुपल फ़ोल्डर सर्किट के तहत रखा जाता है):

#!/usr/bin/env drush

$res = db_delete('node')
  ->condition('type', 'mycontenttype', '=')
  ->execute();

echo "deleted:" . $res;

यह इसे करने का सबसे तेज़ तरीका है: Drbal के फ़ंक्शन db_delete का उपयोग करके db को एक सीधी क्वेरी

उपयोग:

:~# cd /var/www/www.mysite.com
:~# drush --uri=www.mysite.com scr bulk_delete.php 

Doc: https://api.drupal.org/api/drupal/includes ! -Database.database.inc/function/db_delete/7

चेतावनी: यह प्रक्रिया उनके क्षेत्रों के डेटा को नहीं हटाती है। वैसे भी इन क्षेत्रों में एक ही प्रक्रिया लागू की जा सकती है (प्रत्येक क्षेत्र के "बंडल" कॉलम को देखते हुए)। उदाहरण के लिए:

#!/usr/bin/env drush

$field_tables = array(
  'field_data_field_body',
  'field_data_field_mycoolfield',
  'field_revision_body',
  'field_revision_field_mycoolfield'
);

foreach ($field_tables as $field_table) {
  $res = db_delete($field_table)
    ->condition('bundle', 'mycontenttype', '=')
    ->execute();

  echo "deleted:" . $res . "\n\n";
}

जहां "mycontenttype" पहली क्वेरी में उपयोग किया गया है।


शर्त क्यों 'nid' > 5000?
Елин Й

यह एक उदाहरण है, प्रकार की तरह।
मौरो मस्किया

लेकिन मूल पोस्टर में इस तरह की स्थिति के बारे में उल्लेख नहीं किया गया है, इसलिए मुझे लगता है कि उदाहरण अप्रासंगिक है, इस प्रकार भ्रामक है।
Елин Й

1

द्रुपाल al

निम्नलिखित एक-लाइनर का प्रयास करें, यह Drupal से सभी MyContentType नोड्स को हटा देता है:

drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'

या आप इकाई प्रकार के नाम (जैसे नोड) के आधार पर सभी संस्थाओं को हटा सकते हैं:

drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->execute(); entity_delete_multiple("node", array_keys(reset($res)));'

नोट: nodeआपकी इकाई का नाम है, यदि आवश्यक हो तो आप इसे बदल सकते हैं।


यदि आपको मेमोरी या टाइम आउट की त्रुटियां मिलेंगी, तो आप निम्नलिखित सेट्स को कुछ समय पहले जोड़ सकते हैं $res:

ini_set('memory_limit', -1); ini_set('max_execution_time', 0);

1

किसी विशेष सामग्री प्रकार के सभी नोड को हटाने के लिए, आप निम्न कमांड को ड्रश के माध्यम से चलाने का प्रयास कर सकते हैं:

drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'

जहाँ MyContentType आपकी मशीन सामग्री प्रकार नाम (उदाहरण पृष्ठ) है।


1

अलग-अलग नोड्स के लिए:

$ drush php-eval 'node_delete($node->nid);'

drush php-eval
बूटस्ट्रैपिंग Drupal के बाद मनमाने php कोड का मूल्यांकन करें


कृपया अपने कोड को समझाने के लिए कुछ और विवरण जोड़ें, इसके बिना इसे कम गुणवत्ता वाला उत्तर माना जा सकता है (और इसलिए इसे मॉडरेशन के माध्यम से हटाया जा सकता है)।
पियरे.वीयरेंस

1

@Kenorb द्वारा प्रदान किए गए उत्तर को अपडेट करना।

द्रुपाल 8 में

drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'

drush ev '$ प्रकार =' \ '' नोड '' ''; Unit_delete_multiple ($ प्रकार, \ Drupal :: unitQuery ($ प्रकार) -> निष्पादित ());)
geek-merlin

किसी मौजूदा उत्तर को अपडेट करने के लिए, कृपया एक संपादन का सुझाव देने के लिए एक टिप्पणी छोड़ दें।
लीमनक्स

0

आप उपयोग कर सकते हैं

drush node_delete NID विशिष्ट नोड को हटाने के लिए, लेकिन यदि आप सभी प्रकार के नोड्स को सामग्री प्रकार से हटाना चाहते हैं, तो मुझे लगता है कि आप बैच एपीआई का उपयोग करके एक ड्रश प्लगइन बना सकते हैं।


मुझे NUS कमांड ड्रश नोड_delete नहीं मिला।
एड्रियन सीआईडी ​​अल्मागुएर

0

क्या आप डेवेल मॉड्यूल के साथ भी कर सकते हैं जैसा कि उत्तर दिया गया है कि क्या मैं ड्रश के साथ दिए गए कंटेंट टाइप के नोड्स को हटा सकता हूं?

Devel मॉड्यूल स्थापित करें, और सभी नोड्स को हटाने के लिए ड्रश का उपयोग करें,

$ drenc genc --kill 0 0

आप एक प्रकार का विकल्प भी दे सकते हैं,

$ drenc genc --kill --types = लेख ० ०

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