フィールドが空かどうかを確認します


18

$ nodeオブジェクトがある場合、フィールドが空であることを確認する方法は?

私はこれを可能な解決策として見つけました:

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

今すぐ確認できます:

UPDATE .UPS!これは信頼できませんが、昨日はうまくいったと約束します。

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に$フィールド評価される心配がない、FALSEを返します
corbacho

何も設定されていないときにデフォルト値を返したため、これはうまくいきませんでした。

@ Sam152ありがとう!これは、ログインしているときはうまくいきましたが、ログアウトしているときは何も表示されません。その理由と解決策はありますか?
ダン14

こんにちはダン。ログインしても、上記のコードに影響はありません。おそらく、develを使用して変数をデバッグしており、匿名ユーザーには「開発者情報へのアクセス」がありませんか?
Sam152 14

これは、フィールドが空かどうかをチェックする間違った方法です。フィールドを実装するモジュールによって定義されたhook_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()チェック同じパラメータのプロパティ。カスタムフィールドでは、フィールドが空であると見なすために、より複雑な条件を検証する必要があります。

ドキュメントに記載されているhook_field_is_empty()の説明は次のとおりです。

フィールドタイプの空のアイテムを構成するものを定義します。


私はこの答えに感謝しますが、hook_field_is_empty()は非常に遠いようです。フィールドが本当に空かどうかを知りたいです。たとえば、number_field_is_emptyは、0も空であると見なします。また、フィールドが複数値の場合、この関数を直接適用できないことをテストします。
corbacho

1
それは、0または文字列 "0"を含む変数を渡すときにempty()を行うものです。フィールドが空のときに値を使用している可能性があり、hook_field_is_empty()を呼び出すことが、フィールドが空かどうかを知る唯一の方法です。
キアムルノ

間違いがあります。$ function($ value [0]、$ info); api.drupal.org/api/drupal/modules!field!field.api.php/function/…を
volocuga

2

生の値は($content['field_name']['#items'][0][value])で見つかったため、式を使用してフィールドが空かどうかを判断できます。

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

where field_nameは、目的のフィールドの名前と一致します。


いいえ。「値」キーは単なるdb列名です。フィールドタイプによって異なる場合があります。上記の提案として(必要)チェックhook_field_is_empty() -私は最善の方法を考える
volocuga

1

Drupal 8

D8で誰かが同じ答えを必要とする場合、それが私のフィールドをテストするために行うことです:

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.