আমি ফিল্ড_ট্যাচ_ফর্ম () ব্যবহার করে একটি সামগ্রী প্রকার থেকে একটি কাস্টম ফর্মে নির্দিষ্ট ক্ষেত্র যুক্ত করছি। ফর্মটি জমা দেওয়া হলে আমি এই ক্ষেত্রগুলিকে # বৈধ এবং # সাবমিট কলব্যাকগুলি থেকে ফিল্ড_আটাচ_ফর্ম_অালিডিয়েট () এবং ফিল্ড_আত্তাচ_সাম্বিট () কল করে প্রক্রিয়াজাত করছি।
এই মুহুর্তে, আমি পোস্ট-জমা দেওয়ার সাথে তুলনা করতে চাই, নোড অবজেক্টটি মূল নোডের সাথে এবং কেবল ক্ষেত্রগুলির কোনও পরিবর্তন হয়ে থাকলে নোড_সেভ () এ বিরক্ত করব। অতএব, আমি ব্যবহার করে মূল নোড লোড করে শুরু করি 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()
"প্রস্তুত" নোড থেকে পুরো ফিল্ড স্ট্রাকচার তৈরির সাথে খেলতে বা সম্পর্কিত কিছু করতে পারেন , উভয় ক্ষেত্র রেন্ডার করতে পারেন এবং এই এইচটিএমএল স্ট্রিংকে কেবল তুলনা করতে পারেন। শুধু একটি ধারণা।