Перевірте, чи поле порожнє


18

Як перевірити, чи є поле порожнім, якщо у вас є об’єкт $ node ?.

Я знайшов це як можливе рішення:

$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, якщо він має будь-які дані, він поверне масив, тому не хвилюйтесь, що $ field оцінює FALSE у випадку
числових

Це не працювало для мене, оскільки воно повертало значення за замовчуванням, коли нічого не було встановлено.
річка

@ Sam152 Дякую! Це спрацювало чудово, коли я був увійшов у систему, але коли я вийшов, він нічого не показує. Чи є в цьому причина і якесь рішення?
День

Привіт, Ден. Вхід у систему не повинен впливати на вказаний вище код. Можливо, ви використовуєте devel для налагодження змінної, і в інших користувачів немає "доступу до інформації розробника"?
Sam152

Це неправильний спосіб перевірити, чи поле порожнє, ви повинні використовувати підхід, описаний з викликом гачки_field_is_empty, визначеного модулем, що реалізує поле, див. Повідомлення від 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()перевіряє властивість значення того ж параметра. Спеціальні поля можуть вимагати перевірки більш складної умови, щоб вважати поле порожнім.

Опис kuke_field_is_empty (), наведений у документації, є наступним:

Визначте, що являє собою порожній елемент для типу поля.


Я ціную цю відповідь, але, схоже, гачка_field_is_empty () заходить дуже далеко. Хочу знати, чи поле справді порожнє. Наприклад, число_field_is_empty вважає, що 0 також порожній. Також я перевіряю, що ви не можете застосувати цю функцію безпосередньо, якщо поле є багатозначним.
corbacho

1
Саме це і є порожнім (), коли ви передаєте йому змінну, що містить 0, або рядок "0"; це може бути поле, яке використовує значення, коли воно порожнє, а виклик moy_field_is_empty () - єдиний спосіб дізнатися, чи є поле порожнім.
kiamlaluno

Є помилка. Повинна бути функція $ ($ value [0], $ info); Дивіться api.drupal.org/api/drupal/modules!field!field.api.php/function/…
volocuga

2

Ми знайшли значення "raw" в ( $content['field_name']['#items'][0][value]), тож ви можете визначити, чи поле порожнє чи ні, з виразом

(! порожній ($ content ['field_name'] ['# items'] [0] [value]))

де field_nameвідповідає назва потрібного поля.


Ні. Ключ "значення" - це лише стовпець назви колони. Вона може бути різною залежно від типу поля. Я вважаю, що найкращий спосіб - перевірити гачку_field_is_empty () (що потрібно), як було запропоновано вище
volocuga

1

Друпал 8

Якщо комусь потрібна така сама відповідь у D8, саме це я роблю, щоб перевірити своє поле:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.