थोक क्षेत्र का अद्यतन?


35

मैंने एक नया (पाठ) क्षेत्र जोड़ा एक Drupal 7 सामग्री प्रकार के लिए जिसमें पहले से ही कई नोड हैं।

मैं इन सभी नोड्स के लिए डिफ़ॉल्ट मान के साथ फ़ील्ड कैसे भर सकता हूं?

जवाबों:


37

आप EntityFieldQueryनोड्स की एक सूची प्राप्त करने के लिए उपयोग कर सकते हैं , फिर नोड के फ़ील्ड को इसके साथ अपडेट करें node_save():

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific value within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    node_save($node);
  }
}

यदि यह एक-बंद ऑपरेशन है, तो आप ऊपर चलाने के लिए डेवेल मॉड्यूल के एक्सक्यूट PHP फ़ंक्शन का उपयोग कर सकते हैं : अन्यथा, आप एक साधारण कस्टम मॉड्यूल बना सकते हैं।


2
डेवेल या वीबो का उपयोग करने के अलावा, आप पूरी तरह से बूटस्ट्रैप किए गए वातावरण में उपरोक्त कोड को निष्पादित करने के लिए "ड्रश स्क्र मायस्क्रिप्ट" एफपीपी "का भी उपयोग कर सकते हैं।
फिएटसेरविन

इस कोड को शब्द संदर्भ क्षेत्र में एक ही ऑपरेशन को समायोजित करने के लिए कैसे बदलता है?
पटकथा

17

मै इस्तेमाल करूंगा दृश्य बल्क ऑपरेशन का उपयोग करता हूं और उपरोक्त वस्तुओं को अनिवार्य रूप से करने के लिए "एक्सक्यूट आर्बिटवर्स PHP स्क्रिप्ट" का उपयोग करता हूं, लेकिन आपको सभी अतिरिक्त कोड करने की ज़रूरत नहीं है, बस थोड़ा स्निपेट है जो आप चाहते हैं (जैसे $object->field_foo['und'][0]['value'] = 'some_value')


9

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

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    field_attach_presave('node', $node);
    field_attach_update('node', $node);
  }
}

अंतर सीधे field_attach_presaveऔर field_attach_updateफ़ंक्शंस का उपयोग करने में है, जो केवल नोड फ़ील्ड को सही ढंग से अपडेट करते हैं और शेष नोड की बचत प्रक्रिया को छोड़ देते हैं। इसका एक प्रभाव यह है कि कोई भी नोड प्रेस्सेव / सेव हुक नहीं कहा जाएगा, "बदली गई" तारीख को वर्तमान तिथि आदि से अपडेट नहीं किया जाएगा। आपके उपयोग के मामले के अनुसार यह पूरे नोड_सेवे () प्रक्रिया का उपयोग करने के रूप में बेहतर हो सकता है।


4

वास्तव में वीबीओ (व्यूज बल्क ऑपरेशंस) एक अच्छा समाधान है। इसके अलावा, नवीनतम संस्करणों के साथ, आपको एक विकल्प "इकाई मूल्यों को संशोधित" मिलेगा जो एक ऑपरेशन में नोड्स भाषा को अपडेट करने का एक बहुत आसान तरीका प्रदान करता है।


2

इंस्‍टॉल बल्क ऑपरेशन मॉड्यूल को इंस्‍टॉल करें और सक्षम करें और पेज डिस्प्ले के साथ एक दृश्य बनाएं।

ऐड => बल्क ऑपरेशंस: कंटेंट (कंटेंट) फील्ड को ध्यान में रखते हुए।

देखें

यहाँ छवि विवरण दर्ज करें

डिफ़ॉल्ट मान सेट करने के लिए इच्छित फ़ील्ड का चयन करें।

आपके मामले में इसका शीर्षक। छवि में यह टैग है।

दृश्य सहेजें, और उसके द्वारा बनाए गए पृष्ठ पर जाएं। यदि आपके पास परिणामों का एक से अधिक पृष्ठ है, तो आप वर्तमान पृष्ठ पर सभी आइटम, सभी पृष्ठों पर सभी आइटम का चयन करना चुन सकते हैं, या आप व्यक्तिगत नोड्स के अनुरूप बक्से को मैन्युअल रूप से जांच सकते हैं। आगे बढ़ने के लिए कम से कम एक चेकबॉक्स की जाँच करनी चाहिए।

अब आप डिफ़ॉल्ट मान सेट करें और इसे सहेजें।

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