मैं जरूर जाऊंगा field_attach_update
।
विचार सरल है। बस नोड को लोड करें और इसे field_attach_update का उपयोग करके सहेजें।
उदाहरण के लिए:
$node = node_load($nid);
$node->field_name[LANGUAGE_NONE][0]['value'] = 'New value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
// Clear the static loading cache.
entity_get_controller('node')->resetCache(array($node->nid));
यह किसी भी टाइमस्टैम्प या किसी अन्य हुक को नहीं बदलेगा जो कि नोड_सेव आमतौर पर आह्वान करता है। लोड हो रहा है नोड भी कुछ हुक आह्वान करेगा तो शायद यह इतना कुशल नहीं है।
यदि आपके पास निड है और यदि नोड संरचना मृत सरल है, तो आप इसे इस तरह भी कर सकते हैं:
$node = new stdClass();
$node->nid = $nid; // Enter the nid taken. Make sure it exists.
$node->type = 'article';
$node->field_name[LANGUAGE_NONE][0]['value'] = 'New value';
field_attach_presave('node', $node);
field_attach_update('node', $node);
// Clear the static loading cache.
entity_get_controller('node')->resetCache(array($node->nid));
वैसे भी, यदि आप फ़ील्ड के अलावा कुछ भी अपडेट करने का प्रयास कर रहे हैं, तो यह काम नहीं करेगा (टिप्पणी स्थिति, प्रकाशित स्थिति, आदि)। इसके अलावा, यदि आप नोड_सेवे का उपयोग कर रहे हैं, तो विशेष नोड के लिए कैश को विभिन्न तरीकों के लिए स्वचालित रूप से साफ़ कर दिया जाएगा, जिसे हमें 'एंट्री_गेट_कंट्रोलर' से साफ़ करना होगा।
अद्यतन:
ऐसा प्रतीत होता है कि आपको field_attach_presave()
अन्य मॉड्यूल को फ़ील्ड इनपुट को ठीक से संसाधित करने देने के लिए भी कॉल करना चाहिए । फ़ाइल मॉड्यूल, उदाहरण के लिए, इस हुक का उपयोग करके फ़ाइल की स्थिति को स्थायी करने के लिए इसका उपयोग करता है। मैंने ऊपर अपने 2 उदाहरण अपडेट किए हैं।
field_attach_update
?