जाँच करें कि कोई फ़ील्ड खाली है या नहीं


18

आप कैसे जाँचते हैं कि कोई क्षेत्र खाली है, जब आपके पास $ नोड ऑब्जेक्ट है?

मुझे यह संभव समाधान के रूप में मिला:

$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
}

ऐसा लगता है कि यह सबसे अच्छा तरीका है। यदि यह खाली है तो FALSE वापस आ जाएगा, यदि कोई डेटा है तो यह एक सरणी लौटाएगा, इसलिए कोई चिंता नहीं है कि संख्या फ़ील्ड 0, आदि के मामले में $ फ़ील्ड FALSE का मूल्यांकन करती है
corbacho

यह मेरे लिए काम नहीं किया क्योंकि यह डिफ़ॉल्ट मान वापस कर दिया जब कुछ भी सेट नहीं किया गया था।
नदी

@ सैम १५२ धन्यवाद! जब मैं लॉग इन किया गया था तो यह बहुत अच्छा था, लेकिन जब मैं लॉग आउट हो गया तो यह कुछ भी नहीं दिखा रहा है। क्या इसका कोई कारण और कोई समाधान है?
दान

हाय दान। लॉग इन होने से उपरोक्त कोड पर कोई प्रभाव नहीं पड़ता है। शायद आप एक चर डिबग करने के लिए devel का उपयोग कर रहे हैं और anon उपयोगकर्ताओं के पास "एक्सेस डेवलपर जानकारी" नहीं है?
315 में सैम 152

यह जाँचने का गलत तरीका है कि यदि कोई फ़ील्ड खाली है, तो आपको क्षेत्र को लागू करने वाले मॉड्यूल द्वारा परिभाषित हुक_फ़ील्ड_इस_ खाली को कॉल करने के साथ वर्णित दृष्टिकोण का उपयोग करना चाहिए, kiamlaluno द्वारा पोस्ट देखें।
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()के मान गुण की जाँच करता है । फ़ील्ड को खाली मानने के लिए कस्टम फ़ील्ड को सत्यापित करने के लिए अधिक जटिल स्थिति की आवश्यकता हो सकती है।

दस्तावेज़ीकरण में दिए गए हुक_फ़ील्ड_इस_मीट () के लिए विवरण निम्नलिखित है:

परिभाषित करें कि एक फ़ील्ड प्रकार के लिए एक खाली आइटम क्या है।


मैं इस उत्तर की सराहना करता हूं, लेकिन हुक_फ़ील्ड_इस_ खाली () बहुत दूर तक जाता है। मैं जानना चाहता हूं कि क्या मैदान वास्तव में खाली है। उदाहरण के लिए number_field_is_empty मानता है कि 0 भी खाली है। इसके अलावा, मैं परीक्षण करता हूं कि आप इस फ़ंक्शन को सीधे लागू नहीं कर सकते हैं यदि फ़ील्ड बहु-मूल्य है।
corbacho

1
वह वही है जो खाली होता है () जब आप इसे पास करते हैं तो एक चर जिसमें 0, या स्ट्रिंग "0" होता है; यह हो सकता है कि फ़ील्ड खाली होने पर किसी मान का उपयोग कर रहा हो, और हुक_फ़ील्ड_इस_ खाली () को लागू करना यह जानने का एकमात्र तरीका है कि फ़ील्ड खाली है या नहीं।
kiamlaluno

एक गल्ती है। $ फ़ंक्शन ($ मूल्य [0], $ जानकारी) होना चाहिए; देखें api.drupal.org/api/drupal/modules!field!field.api.php/function/...
volocuga

2

हमें ( $content['field_name']['#items'][0][value]) में कच्चा मान मिला , इसलिए आप यह निर्धारित कर सकते हैं कि फ़ील्ड खाली है या नहीं अभिव्यक्ति के साथ

(! खाली ($ सामग्री [ 'FIELD_NAME'] [ '# आइटम'] [0], [value]))

जहां field_nameवांछित क्षेत्र के नाम से मेल खाता है।


नहीं। "मान" कुंजी केवल एक db कॉलम नाम है। यह क्षेत्र के प्रकार के आधार पर भिन्न हो सकता है। मुझे लगता है कि सबसे अच्छा तरीका है - ऊपर दिए गए प्रस्ताव के अनुसार हुक_फ़ील्ड_इस_मीट () (जो आवश्यक है) की जाँच करें
वोल्कोगा

1

द्रुपाल al

अगर किसी को D8 में समान उत्तर की आवश्यकता होती है, तो मैं अपने क्षेत्र का परीक्षण करने के लिए ऐसा करता हूं:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.