मैं अपनी साइट पर सभी नोड्स को जल्दी से कैसे बचा सकता हूं (एक नियम को ट्रिगर करने के लिए जो सामग्री अपडेट पर सक्रिय होता है)?


24

मैंने अपनी साइट पर एक निश्चित सामग्री प्रकार को कॉन्फ़िगर करने में कुछ गलतियाँ कीं। इन गलतियों को ठीक करने के लिए, मैंने एक नियम बनाया जो कुछ क्रिया करता है "जब मौजूदा सामग्री अपडेट की जाती है।" हालाँकि, मैं अपनी साइट पर नहीं जाना चाहता और मैन्युअल रूप से सभी नोड्स को फिर से एक-एक करके सहेजना चाहता हूँ। क्या सभी नोड्स को जल्दी से फिर से सहेजने के लिए नियम या दृश्य बल्क ऑपरेशन का उपयोग करने का एक तरीका है?

जवाबों:


22

VBO में एक "एक्ज़ीक्यूट PHP कोड" क्रिया है। इसे चलाएं, और इनपुट "node_save ($ निकाय);" (उद्धरण चिह्नों के बिना) टेक्स्टबॉक्स में। आपके लिए टाइमआउट को संभालते हुए यह ट्रिक करेगा।


1
आह, बहुत जल्दी :)
क्लाइव

5
वीबीओ में "सेव कंटेंट" का एक विकल्प है, जो आपकी पीएचपी लिखने के बिना ही करेगा।
स्टीवनवॉँ

मुझे "सामग्री सहेजें" विकल्प नहीं मिला, लेकिन आपके द्वारा बताई गई php विधि ने बहुत काम किया! धन्यवाद!
हॉकी 2112

सफलता के बिना php और vbo दोनों तरीकों की कोशिश की। मेरे usecase में, केवल एक मैनुअल सहेजें एक टेबलफ़ील्ड के लिए लेबल को ठीक से अपडेट करता है। अजीब बात है ...
बाइसनबेलु

14

मुझे नियमों या VBO के बारे में पता नहीं है लेकिन आप समान परिणाम प्राप्त करने के लिए एक संक्षिप्त कोड स्निपेट का उपयोग कर सकते हैं:

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

यदि आपको बहुत अधिक नोड्स मिले हैं, तो आपको थोड़ा समय लग सकता है, यदि आपका सर्वर इसकी अनुमति देता है, तो उस कोड के प्रारंभ में समय सीमा का विस्तार करना एक अच्छा विचार होगा, शायद असीमित अगर यह एक बंद है :

set_time_limit(0);

12

आप node_mass_update () फ़ंक्शन का उपयोग कर सकते हैं :

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

यह बहुत अच्छा है क्योंकि आपको समय सीमा की परवाह करने की आवश्यकता नहीं है। यदि 10 से अधिक नोड हैं, तो नोड्स अद्यतन के लिए बैच प्रक्रिया स्वचालित रूप से शुरू हो जाएगी।


5
200,000 से अधिक नोड्स पर पूरी तरह से काम किया। आपके लिए बैच संभालता है। यदि आपके पास devel मॉड्यूल सक्षम है, तो आप उपरोक्त कोड को '/ devel / php' पेज पर पेस्ट कर सकते हैं
2pha

1
शानदार समाधान, पृष्ठभूमि में चलता है, इसलिए समय समाप्त होने या साइटों के प्रदर्शन को मारने का कोई मौका नहीं
डैनियल वाटर्स

5

अपडेट: मैंने अभी Resave All Nodes बनाया है । अभी के लिए इसमें केवल चयनित नोड प्रकारों के सभी नोड्स को फिर से शुरू करने के लिए बैच प्रक्रिया को ट्रिगर करने के लिए एक फॉर्म है। वर्तमान में अल्फा में। मैं एक ड्रश कमांड (बीटा) और कुछ परीक्षण (स्थिर) भी जोड़ने की योजना बना रहा हूं।

Drupal Resave सभी नोड्स स्क्रीनशॉट बनाते हैं


वहाँ Resave नोड्स है । यह क्रोन रन पर उपयोग करने का इरादा है। लेकिन आप इसे मैन्युअल रूप से भी ट्रिगर कर सकते हैं। बस चुनें कि किस प्रकार की सामग्री के नोड्स को फिर से शुरू किया जाना चाहिए।

इससे पहले कि आप "रेस्वे नॉड्स नाउ" को मारकर मैनुअल रेसवे को चला सकें, आपको एक बार "सेव कॉन्फिगरेशन" (एक क्रोन प्रकार और सामग्री प्रकार चुना)।


2

अपने सामग्री प्रकार द्वारा व्यवस्थापक / सामग्री पर जाएं और फ़िल्टर करें - केवल प्रकाशित। सभी का चयन करें और फिर संचालन ड्रॉप डाउन से "परिवर्तन मूल्य" चुनें। 'निष्पादित' पर क्लिक करें। अगले पृष्ठ पर, गुणों से 'स्थिति' चुनें और प्रकाशित छोड़ दें। 'अगला' पर क्लिक करें सभी प्रकाशित नोड बिना किसी बदलाव के फिर से शुरू हो जाएंगे।

अप्रकाशित नोड्स के लिए दोहराएं (लेकिन संपत्ति के रूप में अप्रकाशित का चयन करें)।

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