बस सोच रहा था कि क्या ड्रश किसी दिए गए सामग्री प्रकार के नोड्स को हटाने में सक्षम है।
कुछ इस तरह: $ drush delete-node --type=MyContentType
यदि संभव नहीं है, तो क्या मैं इस तरह की विधि बना सकता हूं ?
बस सोच रहा था कि क्या ड्रश किसी दिए गए सामग्री प्रकार के नोड्स को हटाने में सक्षम है।
कुछ इस तरह: $ drush delete-node --type=MyContentType
यदि संभव नहीं है, तो क्या मैं इस तरह की विधि बना सकता हूं ?
जवाबों:
आप इस प्रकार एक समारोह बना सकते हैं:
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
क्वेरी का भी उपयोग कर सकते हैं , लेकिन जब आप एंटिटीज के साथ काम कर रहे हैं, तो यह देखने में अधिक समझदार / सामान्य-व्यवहार लगता है ।
यह तर्क बदलने या जोड़ने के लिए भी काफी आसान होना चाहिए। आप इसे एक ड्रश कमांड में भी आसानी से डाल सकते हैं - ड्रश रिपॉजिटरी में यह कैसे करें (नीचे के पास कमांड्स सेक्शन की जाँच करें) के लिए एक उदाहरण है ।
Devel मॉड्यूल स्थापित करें, और सभी नोड्स को हटाने के लिए ड्रश का उपयोग करें,
$ drush genc --kill 0 0
आप एक प्रकार का विकल्प भी दे सकते हैं,
$ drush genc --kill --types=article 0 0
devel_generate
मॉड्यूल devel के साथ शामिल है, लेकिन जरूरतों के साथ सक्षम करने की drush en devel_generate
Genc सामान्य रूप से करने के लिए प्रयोग किया जाता है बनाने , नोड्स तो अंत में 0 0 कुछ भी नया बनाने के लिए नहीं यह कह रहा है, और --kill क्या पहले से ही वहाँ है हटाने के लिए।
मुझे लगता है कि आप नीचे दिए गए आदेश का उपयोग करके कर सकते हैं
drush node_delete <nid>
EDIT: एक मॉड्यूल मिला जो कुछ करता है / प्रश्न से संबंधित है
http://drupal.org/project/delete_all
प्रयोग
Drush
drush delete-all
उदाहरण: drush delete-all article
delete_all
तक , ड्रुपल 8 के लिए अभी तक पोर्ट नहीं किया गया है , लेकिन genc उत्तर काम करता है।
कुछ इस तरह से काम करेगा (अप्राप्त):
$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
।
एपीआई का उपयोग सुनिश्चित करेगा कि सभी उचित हुक आग। अन्य बातों के अलावा, वे नोड संशोधन और फ़ील्ड डेटा (और उनके संशोधन) को भी हटा देंगे ताकि आपके पास डेटाबेस में अनाथ डेटा न हो।
इस धागे पर कुछ अच्छे विचार हैं। यदि आप वास्तव में कोई प्रोग्रामिंग नहीं करना चाहते हैं और Drush का उपयोग करना चाहते हैं तो आप डिलीट ऑल कंट्रोल्ड मॉड्यूल को देख सकते हैं :
Drush ड्रश डिलीट-ऑल उदाहरण: ड्रश डिलीट-ऑल आर्टिकल Drupal 7 संस्करण पर Drush किसी विशिष्ट सामग्री प्रकार या उपयोगकर्ताओं के सभी नोड्स, नोड्स को हटा दें। उदाहरण: drush delete-all article सभी लेख नोड्स को हटा दें। drush Delete-all सभी प्रकार के नोड्स हटाएँ। drush delete-all --reset सभी प्रकार के नोड्स को हटाएं, और नोड, संशोधन और टिप्पणी काउंटर रीसेट करें। drush delete-all users उपयोगकर्ता हटाएं। विकल्प: नोड, संशोधन और टिप्पणी तालिकाओं के लिए - रीसेट रीसेट काउंटर। - भूमिकाओं उठाओ एलियासेस: दा
वीबीओ में ड्रश इंटीग्रेशन है। नोड्स का VBO दृश्य बनाएं, इसे Drush (उपयोग करके drush vbo-execute
) के माध्यम से निष्पादित करें , नोड प्रकार को एक तर्क के रूप में पास करें।
आप एक ड्रश स्क्रिप्ट भी बना सकते हैं (मान लीजिए कि इसे "बल्क_डेलीट.फ्प" कहा जाता है और इसे ड्रुपल फ़ोल्डर सर्किट के तहत रखा जाता है):
#!/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
?
द्रुपाल 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);
किसी विशेष सामग्री प्रकार के सभी नोड को हटाने के लिए, आप निम्न कमांड को ड्रश के माध्यम से चलाने का प्रयास कर सकते हैं:
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
जहाँ MyContentType आपकी मशीन सामग्री प्रकार नाम (उदाहरण पृष्ठ) है।
अलग-अलग नोड्स के लिए:
$ drush php-eval 'node_delete($node->nid);'
drush php-eval
बूटस्ट्रैपिंग Drupal के बाद मनमाने php कोड का मूल्यांकन करें
@Kenorb द्वारा प्रदान किए गए उत्तर को अपडेट करना।
द्रुपाल 8 में
drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'
आप उपयोग कर सकते हैं
drush node_delete NID
विशिष्ट नोड को हटाने के लिए, लेकिन यदि आप सभी प्रकार के नोड्स को सामग्री प्रकार से हटाना चाहते हैं, तो मुझे लगता है कि आप बैच एपीआई का उपयोग करके एक ड्रश प्लगइन बना सकते हैं।
क्या आप डेवेल मॉड्यूल के साथ भी कर सकते हैं जैसा कि उत्तर दिया गया है कि क्या मैं ड्रश के साथ दिए गए कंटेंट टाइप के नोड्स को हटा सकता हूं?
Devel मॉड्यूल स्थापित करें, और सभी नोड्स को हटाने के लिए ड्रश का उपयोग करें,
$ drenc genc --kill 0 0
आप एक प्रकार का विकल्प भी दे सकते हैं,
$ drenc genc --kill --types = लेख ० ०