ক্ষেত্রের মানগুলি অ্যাক্সেস করার জন্য আমি সত্তা মেটাডেটা র্যাপার ক্লাসগুলি (দ্রুপাল in-তে সত্তা মডিউল দ্বারা সংজ্ঞায়িত) ব্যবহার করার চেষ্টা করছি, কারণ এটি এটি করার একটি পরিষ্কার উপায় বলে মনে হয়।
কয়েকটি জিনিস আছে যা এটিকে কিছুটা বিশ্রী করে তোলে। ধরুন আমার কাছে একটি সামগ্রীর প্রকারের জন্য একটি মোড়ক রয়েছে যা একটি ক্ষেত্রকে field_something
এরূপ হিসাবে সংজ্ঞায়িত করে :
$wrapper = entity_metadata_wrapper('node', node_load($nid));
$value = $wrapper->field_something->value();
আমার প্রথম সমস্যাটি হ'ল আমি যা পাই তা আসল মান (স্ট্রিং, সত্তা, ইত্যাদি), অন্য একটি মেটাডেটা স্ট্রাকচার র্যাপার (যখন ক্ষেত্রের একাধিক মান থাকে) বা অ্যারের (কখন ক্ষেত্রগুলির একাধিক বৈশিষ্ট্য রয়েছে)।
info()
পদ্ধতিটি ব্যবহার করে আমি এই প্রশ্নের উত্তর দেওয়ার একটি উপায় পেয়েছি :
$info = $wrapper->field_something->info();
$is_multi_value = (strpos($info['type'], 'list<') === 0);
$has_multiple_properties = isset($info['property info']]);
তবে এটি খুব কমই ব্যবহারিক। আমি যখনই কোনও ক্ষেত্রটি এর আগে সংজ্ঞা না জেনে ব্যবহার করতে চাই, তখন অবশ্যই বেশ কয়েকটি কেস আমলে নেওয়া উচিত। এটি আমার কোডটিকে বেশ ভারী করে তোলে।
এটি মোকাবেলা করার জন্য আমি কয়েকটি কোড লিখেছি যা:
- নিশ্চিত করে যে আমরা সর্বদা একটি অ্যারে ফিরিয়ে আনব, এমনকি এটি একক মানের ক্ষেত্র হলেও;
- যখন একাধিক বৈশিষ্ট্য থাকে, প্রথম কলামটির মানটি ফিরিয়ে দিন।
পয়েন্ট 1. এখানে সর্বদা কাজ করবে, যদি না কলার জানতে না চান যে এটি একক মান ক্ষেত্র ছিল কিনা। পয়েন্ট 2 কিছু ক্ষেত্রে কাজ করে, সমস্তটি নয়, তবে এটি প্রযোজ্য ক্ষেত্রে সুবিধাজনক।
কোডটি এখানে:
function entity_metadata_simple_values($field) {
$fields = array();
$values = array();
$info = $field->info();
if (strpos($info['type'], 'list<') === 0) {
foreach ($field->getIterator() as $field_iteration) {
$fields[] = $field_iteration;
}
} else {
$fields[] = $field;
}
foreach ($fields as $final_field) {
$ff_info = $final_field->info();
if (isset($ff_info['property info'])) {
$column = reset(array_keys($ff_info['property info']));
$values[] = $final_field->{$column}->value();
} else {
$values[] = $final_field->value();
}
}
return $values;
}
সুতরাং আমার প্রশ্নটি: ক্ষেত্রের প্রকারটি জানা না গেলে মেটাডেটা মোড়কের কাছ থেকে মান পাওয়ার এই সমস্যাটির সমাধান করার সহজ / আরও ভাল উপায়গুলি কী?