কোনও ক্ষেত্র খালি আছে কিনা তা পরীক্ষা করে দেখুন


18

আপনার যদি check নোড অবজেক্ট থাকে তবে কোনও ক্ষেত্রটি খালি রয়েছে তা কীভাবে পরীক্ষা করবেন?

আমি এটি সম্ভাব্য সমাধান হিসাবে পেয়েছি:

$field = field_get_items('node', $node, 'field_post_image');

আমি এখন যাচাই করতে পারি:

আপডেট .উপস! এটি নির্ভরযোগ্য নয়, আমি ভেবেছিলাম যে এটি গতকাল আমার জন্য কাজ করেছে।

isset($field);

তবে আমি আরও অবাক হই যে এর চেয়ে ভাল উপায় যদি আছে।

আমাকে আলোকিত করুন

উত্তর:


30

আপনি যদি ডকুমেন্টেশন পড়েন FALSEতবে কোনও ডেটা না থাকলে ফাংশনটি ফিরে আসে । isset()আসলে ব্যর্থ হবে কারণ আপনি FALSEভেরিয়েবলকে অর্পণ করছেন তাই এটি আসলে কিছুতে সেট করা হয়েছে। সঠিক বাক্য গঠনটি হ'ল:

$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
   //Do something with the field
}
else{
   //There are no results
}

দেখে মনে হচ্ছে এটি সেরা উপায়। যদি এটি খালি থাকে তবে ফালস ফিরে আসবে, যদি কোনও তথ্য থাকে তবে এটি অ্যারে ফিরিয়ে দেবে, তাই কোনও উদ্বেগের দরকার নেই যে $ ক্ষেত্রটি 0 নম্বর, ইত্যাদি ক্ষেত্রে FALSE এর কাছে মূল্যায়ন করে
কর্বাচো

এটি আমার পক্ষে কার্যকর হয়নি কারণ কোনও কিছু সেট না করা অবস্থায় এটি ডিফল্ট মানটি ফিরিয়ে দেয়।
নদী

@ স্যাম 152 ধন্যবাদ! এটি যখন আমি লগ ইন করেছিলাম তার জন্য দুর্দান্ত কাজ করেছে, কিন্তু আমি যখন লগ আউট করি তখন এটি কিছুই দেখায় না। এটির কোনও কারণ আছে কি?
ড্যান

হাই ড্যান লগ ইন হওয়ার কারণে উপরের কোডটিতে কোনও প্রভাব থাকতে হবে না। সম্ভবত আপনি একটি পরিবর্তনশীল ডিবাগ করতে ডভেল ব্যবহার করছেন এবং আননের ব্যবহারকারীদের "অ্যাক্সেস বিকাশকারী তথ্য" নেই?
Sam152

ক্ষেত্রটি ফাঁকা আছে কিনা তা যাচাইয়ের এটি ভুল উপায়, আপনি ক্ষেত্রটি বাস্তবায়নকারী মডিউল দ্বারা সংজ্ঞায়িত hook_field_is_empty কল করার সাথে বর্ণিত পদ্ধতিটি ব্যবহার করা উচিত, কিমলালানো পোস্টটি দেখুন।
lslinnet

8

ক্ষেত্রটি খালি আছে কিনা তা যাচাই করতে আপনি নীচের স্নিপেট ব্যবহার করতে পারেন।

$info = field_info_field($field_name);
$function = $info['module'] . '_field_is_empty';

if (function_exists($function)) {
  $value = field_get_items('node', $node, $field_name);
  $is_empty = $function($value[0], $info);
}

এই কোডটি নিরাপদ, কারণ বিভিন্ন ক্ষেত্রকে বিভিন্ন পরিস্থিতিতে খালি মনে করা হয়। দেখুন, উদাহরণস্বরূপ, মধ্যে পার্থক্য file_field_is_empty () , number_field_is_empty () , এবং taxonomy_field_is_empty () : taxonomy_field_is_empty()চেক TID সম্পত্তির $itemপরামিতি, যখন number_field_is_empty()চেক মান একই প্যারামিটারের সম্পত্তি। ক্ষেত্রটি খালি বিবেচনা করার জন্য কাস্টম ক্ষেত্রগুলির যাচাই করার জন্য আরও জটিল শর্তের প্রয়োজন হতে পারে।

ডকুমেন্টেশনে hook_field_is_empty () এর বিবরণটি নিম্নলিখিতটি:

ক্ষেত্রের ধরণের জন্য খালি আইটেমটি কী তা নির্ধারণ করে।


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

1
আপনি এটি 0 যুক্ত একটি ভেরিয়েবল বা "0" স্ট্রিংটি পাস করার পরে খালি () হয় না; ক্ষেত্রটি শূন্য থাকা অবস্থায় কোনও মান ব্যবহার করা হতে পারে এবং ক্ষেত্রটি খালি কিনা তা জানার একমাত্র উপায় হুক_ফিল্ড_আইস_েম্পটি ()।
kiamlaluno

একটা ভুল হয়েছে. $ ফাংশন ($ মান [0], $ তথ্য) হওয়া উচিত; দেখুন api.drupal.org/api/drupal/modules!field!field.api.php/function/…
ভলোকাগা

2

আমরা ( $content['field_name']['#items'][0][value]) -এর কাঁচা মান খুঁজে পেয়েছি , সুতরাং আপনি ক্ষেত্রটি খালি কিনা তা আপনি নির্ধারণ করতে পারবেন এবং অভিব্যক্তিটি নেই

(! খালি ($ সামগ্রী [ 'FIELD_NAME'] [ '# টি আইটেম'] [0] [VALUE]))

যেখানে field_nameকাঙ্ক্ষিত ক্ষেত্রের নাম মেলে।


"মান" কীটি কেবল একটি ডিবি কলামের নাম। ক্ষেত্রের ধরণের উপর নির্ভর করে এটি ভিন্ন হতে পারে। আমি মনে করি সবচেয়ে ভাল উপায় - উপরে প্রস্তাবিত হিসাবে hook_field_is_empty () প্রয়োজনীয় (যা প্রয়োজন)
চেক করুন

1

দ্রুপাল ৮

ডি 8-তে কারও যদি একই উত্তর প্রয়োজন হয় তবে আমার ক্ষেত্রটি পরীক্ষা করতে আমি এটিই করি:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.