it-swarm-id.com

Periksa apakah suatu bidang kosong

Bagaimana Anda memeriksa bahwa suatu bidang kosong, ketika Anda memiliki objek $ node?.

Saya menemukan ini sebagai solusi yang mungkin:

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

Saya dapat memeriksa sekarang:

PEMBARUAN .Baru! Ini tidak dapat diandalkan, meskipun saya berjanji itu bekerja untuk saya kemarin.

isset($field);

tapi saya ingin tahu apakah ada cara yang lebih baik.

Cerahkan saya

17
corbacho

Jika Anda membaca di dokumentasi fungsi mengembalikan FALSE jika tidak ada data. isset() sebenarnya akan gagal karena Anda menugaskan FALSE ke variabel sehingga sebenarnya telah disetel ke sesuatu. Sintaks yang benar adalah:

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

Anda dapat menggunakan cuplikan berikut untuk memverifikasi jika bidang kosong.

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

Kode ini lebih aman, karena bidang yang berbeda dianggap kosong dalam kondisi yang berbeda. Lihat, misalnya, perbedaan antara file_field_is_empty () , number_field_is_empty () , dan taxonomy_field_is_empty () : taxonomy_field_is_empty() pemeriksaan properti tid dari parameter $item, sementara number_field_is_empty() memeriksa nilai properti dari parameter yang sama. Bidang khusus dapat membutuhkan kondisi yang lebih rumit untuk diverifikasi, agar bidang tersebut kosong.

Deskripsi untuk hook_field_is_empty () yang diberikan dalam dokumentasi adalah sebagai berikut:

Tentukan apa yang merupakan item kosong untuk tipe bidang.

8
kiamlaluno

Kami menemukan nilai mentah di ($content['field_name']['#items'][0][value]), sehingga Anda dapat menentukan apakah bidang kosong atau tidak dengan ekspresi

(! kosong ($ content ['field_name'] ['# items'] [0] [value]))

dimana field_name cocok dengan nama bidang yang diinginkan.

2
eduardocs

Drupal 8

Jika seseorang membutuhkan jawaban yang sama di D8, itulah yang saya lakukan untuk menguji bidang saya:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
1
Pauleau