একটি সত্তা_মেডাটা_আরাপার ক্ষেত্রের জন্য অস্তিত্বের জন্য অনুসন্ধান করা হচ্ছে


22

আমি একটি ক্ষেত্র সংগ্রহের মাধ্যমে পুনরাবৃত্তি করছি, এবং ক্ষেত্রের সংগ্রহ আইটেমগুলিকে একটি সত্তা_মেটাডেটা_আপনার দিয়ে মোড়ানো করছি। ক্ষেত্রটির valueপদ্ধতিটি কল করার আগে আমি ক্ষেত্রটির অস্তিত্বের জন্য যাচাই করতে চাই (যার ফলশ্রুতিগুলির ক্ষেত্রে কোনও ত্রুটির ফলস্বরূপ ফল হয় না) তবে আমি এটি করার উপায় খুঁজে পাই না।

$field_collection_item = field_collection_item_load($id);
$item_wrapper = entity_metadata_wrapper('field_collection_item', $field_collection_item);

// this results in an error if the field_contrib_headshot field is empty
$headshot = $item_wrapper->field_contributor->field_contrib_headshot->value();

আমার বর্তমান field_get_itemsকর্মক্ষেত্রটি ক্ষেত্রটি খালি আছে কিনা তা দেখার জন্য, তবে আমি যদি সম্ভব হয় তবে মেটাডেটা মোড়কের মাধ্যমে এটি করতে সক্ষম হতে চাই।

উত্তর:


26

কেবল পিএইচপি ফাংশন কল করুন isset():

$headshot = array();
if (isset($item_wrapper->field_contributor->field_contrib_headshot)) {
  $headshot = $item_wrapper->field_contributor->field_contrib_headshot->value();
}

EntityStructureWrapper প্রয়োগ __isset()এর প্রিন্সিপি অনুযায়ী ফাংশন ওভারলোডিং


হ্যাঁ, আমি সর্বদা এটি কীভাবে করেছি, অভ্যন্তরগুলিতে কম বাঁধা এবং আইএমও পড়া সহজ। সম্মত!
কটার

9

যে কোনও সময় সত্তা রেফারেন্স বা ক্ষেত্রের সংগ্রহ রয়েছে, আইসেট () কখনই আমার পক্ষে কাজ করে নি। আমাদের যখন সত্তা রেফারেন্স রয়েছে তা যে কোনও সময় কাজ করে বলে মনে হচ্ছে:

if($wrapped_entity->entity_reference_field->getIdentifier()) {
  // This code only fires if there is an entity reference or field collection set.
}

এই উত্তর এবং নিম্নলিখিত পোস্টটি আমার জন্য কাজ করেছে: dropbucket.org/node/1201
tyler.frankenstein

4

দেখে মনে হচ্ছে entity_referenceযে পদ্ধতিতে শৃঙ্খলাবদ্ধতার কারণে আপনার কোনও জায়গায় রয়েছে। তবে, সত্তা স্ট্রাকচারওয়্যারের জন্য __isset () পদ্ধতিটি দেখুন

চেক করুন:

$has_headshot = $item_wrapper->field_contributor->__isset('field_contrib_headshot');

এবং তারপরে IFআপনার যুক্তিটি করার জন্য একটি ব্লক ব্যবহার করুন ...

সম্পাদনা করুন:

$has_headshot এখন বৈধ চেক পছন্দসই।


আমি নিশ্চিত না আপনি কী বোঝাতে চেয়েছেন "মনে হচ্ছে আপনার কোথাও কোনও সত্তার রেফারেন্স রয়েছে", আপনি যদি ব্যাখ্যা করতে পারতেন যে আরও কিছুটা আমি এর প্রশংসা করব। __issetমাঠ সংগ্রহের ক্ষেত্রে দুর্দান্ত কাজ করে, যদিও আমার পুরো ফিল্ডের নাম যুক্ত করা দরকার: এর field_contrib_headshotপরিবর্তেcontrib_headshot
নিক টমলিন

ক্ষেত্র মান হয়; একটি স্ট্রিং, একটি সংখ্যা, যাই হোক না কেন। field_contributorঅন্য ক্ষেত্রটি উল্লেখ করছে field_contrib_headshot... আপনি সেখানে কোনওভাবে বাসা বাঁধছেন। আমি ধরে নিচ্ছি আপনি এই জিনিসগুলিকে বাসা বাঁধার জন্য সত্তা_সংশ্লিষ্টতা বা ফিল্ড_গ্রুপের মতো অন্য কোনও কিছু ব্যবহার করছেন ... আমি যা বলতে চাইছি তা সবই বোঝা যায়।
টেনকেন

আপনার জন্য কাজ করে __isset () কোডটি কী ছিল?
টেনকেন

এটি ছিল:$item_wrapper->field_contributor->__isset('field_contrib_headshot')
নিক টমলিন

সরাসরি __isset () সরাসরি কল করা আমার কাছে অদ্ভুত লাগছে কেন, কেন নয়: $has_headshot = isset($item_wrapper->field_contributor->field_contrib_headshot);
কটার

1
$wrapper = entity_metadata_wrapper('node', 123);
if($wrapper->__isset('field_middle_name')) {
    // Do something awesome with the middle name.
} else {
    // Don't do anything awesome, they don't have a middle name.
}

সত্তা রেফারেন্স ক্ষেত্র এবং ক্ষেত্র সংগ্রহ

// also check if there is an identifier, __isset alone is not enough!
if ($wrapper->__isset('field_project_number') && $wrapper->field_project_number->getIdentifier()) {
    $number =  $wrapper->field_project_number->field_project_number_complete->value();
    return $number;
}

অনুলিপি করা থেকে সোজা আটকানো http://dropbucket.org/node/1201 কিন্তু অন্য কোন উত্তর এতদূর চেয়ে ভাল উদাহরণ আছে বলে মনে হয় ...


1

সত্ত্বা মেটাডেটা র‍্যাপারের জন্য:

আপনার যদি এমন কোডের ব্লকগুলি রয়েছে যেগুলি চলবে না বা আপনি পিএইচপি ত্রুটিগুলি পেয়ে এসেছেন তবে নীচের কয়েকটি উদাহরণ দেখুন। এই উদাহরণটি সম্পত্তি এনআইডি ব্যবহার করে।

সমস্ত ভুল হতে পারে

if ($wrapper->__isset('nid')) {
  $var = $wrapper->nid->value();
}
else {
  // Do something it's FALSE;
}

অথবা

if ($wrapper->__isset('nid')) {
  $var = $wrapper->nid->getIdentifier();
}
else {
  // Do something it's FALSE;
}

অথবা

if ($wrapper->nid->value()) {
  // Do something it's TRUE.
}
else {
  // Do something it's FALSE;
}

আপনি দেখতে পাবেন যে এই জাতীয় পছন্দ হিসাবে ব্যবহার করা নিড উপস্থিত না থাকলেও সত্য হতে পারে ate -> getIdentifier (), বা -> মান (), বা -> কাঁচা () ব্যতিক্রম ছুঁড়ে দিতে পারে।

সর্বদা সত্য

if (isset($wrapper->nid)) {
  // Do something it must be TRUE....Ah Hem wait.. this runs every time.
}

এই ইনস্টল ব্যবহার করুন

try {
  $var = $wrapper->nid->raw();
} 
catch (EntityMetadataWrapperException $e) {
  $var = FALSE;
}

0

আমি খুঁজে পেয়েছি যে কোনও ফাংশন কলের ফলাফলের জন্য এইসেট () ব্যবহার করা যায় না। যেহেতু নীচের বিবৃতিটি দিয়ে কোনও বুলিয়ান ফিরিয়ে দেওয়া হয়েছে, তাই আমি যাচাইকরণের উপাদানটির আসলে মূল্য ছিল তা যাচাই করতে সক্ষম হয়েছি।

if ( $wrapper->field_media_alternate[0]->value() ) {
  //...valid logic...
} else {
  //...not valid logic...
}

0

মানুষ প্রায়শই এটি ভুল হয়ে যায়। আপনি যখন কোনও সত্তা মেটাডেটা মোড়কে আইসেট কল করবেন তখন আপনি এটি পরীক্ষা করছেন কিনা সত্তার বান্ডিলটি সেই সম্পত্তি সমর্থন করে দেখছেন । ক্ষেত্রের আসল মান নিয়ে এর কিছুই করার নেই।

কোনও মান সেট করা আছে কিনা তা যাচাই করার জন্য সত্যই কোনও স্বাধীন পদ্ধতি নেই। আপনাকে কেবল মূল্য () বা, পছন্দসই, কাঁচা () মূল্যায়ন করতে হবে। (এটি যদি কোনও বহু-মান ক্ষেত্র হয় তবে আপনি কাউন্টকেও কল করতে পারেন) তবে কাঁচা () খালি অ্যারেটি ফিরিয়ে দেবে যাতে এটি আসলে প্রয়োজন হয় না))

$w = entity_metadata_wrapper('node', $nid);
//Start by checking whether the node bundle supports field_entityref_myfield.
if (isset($w->field_entityref_myfield)) {
  //If we called value(), then that would cause the referenced entity
  //to be loaded, whereas raw() just gives us the entity_id if the value
  //is set, and Null if it isn't.
  if ($w->field_entityref_myfield->raw()) {
    //Do some things based on the entity-reference being set.
  } else {
    //Do some other things based on the entity-reference NOT being set.
  }
}

পুনরাবৃত্তি করতে, কাঁচা () হ'ল একটি ক্ষেত্র বিদ্যমান কিনা তা পরীক্ষা করতে আপনার ব্যবহার করা উচিত। এটি নির্ভরযোগ্য এবং গণনামূলকভাবে সস্তা।


0

কোনও সত্তা রেফারেন্সের সুনির্দিষ্ট সেট চেইনের কাছ থেকে একটি মূল্য পেতে এখানে আমার ব্যক্তিগত সহায়ক ফাংশনটি রয়েছে:

function _get_wrapped_value_ifset($wentity, $field_chain){
  $root = $wentity;
  try{
    foreach ( $field_chain as $field_name ) {
      $root = $root->{$field_name};
    }
    return $root->value();
  }
  catch (EntityMetadataWrapperException $e){
    return null;
  }
}

$ গোষ্ঠিটি মোড়ক সত্তা, $ ক্ষেত্র_চেনা ক্ষেত্রের_নামগুলির মতো একটি অ্যারে:

[
  'field_reference_from_the_wentity',
  'field_wanted_field_from_the_referenced_entity'
] 

আপনিও করতে পারেন:

[
  'field_reference_from_the_wentity', 
  'field_reference_from_the_referenced_entity',
  ... 
  'field_wanted_field_from_the_N_referenced_entity'
]

এটা কাজ করবে!

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.