मैं फ़ील्ड_टैच_फॉर्म () का उपयोग करके सामग्री प्रकार से कुछ फ़ील्ड को कस्टम रूप में जोड़ रहा हूं। जब फॉर्म सबमिट किया जाता है, तो मैं उन क्षेत्रों को फ़ील्ड कर रहा हूं जो #_idachate और #submit callbacks से field_attach_form_validate () और field_attach_submit () कॉल करके कर रहा है।
उस बिंदु पर, मैं पोस्ट-सबमिट, तैयार नोड ऑब्जेक्ट की तुलना मूल नोड से करना चाहता हूं और केवल नोड_सेवे () को परेशान करता हूं यदि कोई फ़ील्ड बदल गई है। इसलिए, मैं मूल नोड का उपयोग करके लोड करना शुरू करता हूं entity_load_unchanged()
।
दुर्भाग्य से, मूल नोड ऑब्जेक्ट में फ़ील्ड सरणियाँ तैयार नोड ऑब्जेक्ट में फ़ील्ड सरणियों से मेल नहीं खाती हैं, जो सहेजने की प्रतीक्षा कर रही है, भले ही फ़ील्ड में कोई परिवर्तन नहीं किया गया हो, इसलिए एक सरल "$ old_field == $ new_field “तुलना असंभव है। उदाहरण के लिए, एक साधारण पाठ फ़ील्ड मूल में इस तरह दिखाई देता है:
$old_node->field_text['und'][0] = array(
'value' => 'Test',
'format' => NULL,
'safe_value' => 'Test',
);
जबकि तैयार नोड में यह इस तरह दिखाई देता है।
$node->field_text['und'][0] = array(
'value' => 'Test',
);
आप केवल 'मान' कुंजी की तुलना करने के लिए सोच सकते हैं, लेकिन फिर आप अन्य तत्वों से बने क्षेत्रों में भाग लेते हैं, जिनमें 'मान' कुंजी नहीं होती है। उदाहरण के लिए, आइए एक पता फ़ील्ड देखें जहां कोई 'मान' कुंजी नहीं है और पुराने और तैयार किए गए दोनों नोड्स में चाबियाँ हैं जिनके समकक्ष नहीं हैं।
पुराना नोड
$old_node->field_address['und'][0] = array(
'country' => 'GB',
'administrative_area' => 'Test',
'sub_administrative_area' => NULL,
'locality' => 'Test',
'dependent_locality' => NULL,
'postal_code' => 'Test',
'thoroughfare' => 'Test',
'premise' => 'Test',
'sub_premise' => NULL,
'organisation_name' => 'Test',
'name_line' => 'Test',
'first_name' => NULL,
'last_name' => NULL,
'data' => NULL,
);
तैयार नोड
$node->field_address['und'][0] = array(
'element_key' => 'node|page|field_address|und|0',
'thoroughfare' => 'Test',
'premise' => 'Test',
'locality' => 'Test',
'administrative_area' => 'Test',
'postal_code' => 'Test',
'country' => 'GB',
'organisation_name' => 'Test',
'name_line' => 'Test',
);
खाली खेतों के लिए, अभी तक एक और विसंगति है।
पुराना नोड
$old_node->field_text = array();
तैयार नोड
$node->field_text = array(
'und' => array(),
);
क्या मैं यह पता लगाने के लिए किसी भी क्षेत्र के पुराने और नए मूल्य की उदारता से तुलना कर सकता हूं कि यह बदल गया है या नहीं?
क्या यह सिर्फ एक असंभावना है?
_field_invoke()
"तैयार" नोड से पूर्ण क्षेत्र संरचना तैयार करने के लिए या कुछ से संबंधित खेल सकते हैं , दोनों क्षेत्रों को प्रस्तुत कर सकते हैं और बस इन HTML स्ट्रिंग्स की तुलना कर सकते हैं। एक विचार है।