नोड के लिए फ़ील्ड मान कैसे अपडेट करें?


21

मैं नोड के लिए किसी फ़ील्ड का मान बदलना चाहता हूं। मैंने निम्नलिखित कोड का उपयोग किया है:


$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);

समस्या यह है $node->languageरिटर्न esसमय में print_r($node)यह है und। क्यों $node->languageक्या में है से अलग है $ नोड सरणी और मैं इसे कैसे मिल सकता है?

जवाबों:


41
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();

इकाई मेटाडेटा आवरण नोड में फ़ील्ड्स के मान सेट या पढ़ने के लिए एक शानदार तरीका है!


मुझे यह पसंद है कि मैं चीजों को अच्छा और साफ बनाता हूँ। मैं इस बात के लिए एक जाँच शामिल करूँगा कि क्या $ n नोड_ लोड होने के बाद मौजूद है () एक अनर्थक त्रुटि से बचने के लिए जब अनजाने में इकाई में प्रवेश कर रहा है_metadata_wrapper ()।
टेक्सास-ब्रोंस

आप सीधे EMW को $ nid पास कर सकते हैं।
नवाफल

Unit_metadata_wrapper का उपयोग करना स्वीकृत उत्तर होना चाहिए।
अंकलता

2
यदि यह दूसरों के लिए स्पष्ट नहीं है, तो Unit_metadata_wrapper () Entity API मॉड्यूल का हिस्सा है: drupal.org/project/entity
BWPanda

9

field_attach_update()फ़ंक्शन का प्रयास करें ।

$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);

यह क्षेत्र के मूल्य को अद्यतन करेगा और यह इससे बेहतर प्रदर्शन करता है node_save


1
क्यों field_attach_update को घटाया जाता है?
दूधोव्स्की

6
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);

4

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

उदाहरण:

$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);

कभी-कभी इसके अतिरिक्त आपको नोड स्टैटिक कैश को रीसेट करना पड़ सकता है resetCache(array($nid)):

entity_get_controller('node')->resetCache(array($node->nid));

स्रोत: नोड के क्षेत्रों को बचाने के लिए नोड को बचाने के बिना ही


2

मैंने अभी इसे लागू किया है और पाया है कि इस कोड ने मेरे लिए काम किया।

$node = node_load($nid); 
if (isset($node)) {
  $field_language = field_language('node', $node, 'field_myfield');
  $node->field_fieldname[$field_language][0]['value'] = 'some value';
  node_save($node);
}

ध्यान दें कि जब मैं field_fieldname अपडेट कर रहा था तो मैंने पाया कि इसका उपयोग लाइन 4 में किया गया था

$node->field['field_myfield'][0]['value'] = 'some value';

काम नहीं किया।

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