フィールドが空でないことを確認します


15

ノードテンプレートのフィールドが空かどうかを確認する最良の方法は何ですか。

node--example.html.twigでは、「content」変数を使用できます。

ブロックをチェックするようなチェックは使用できません

{% if content.field_example  %}

私はこのようなものを使用できます:

{% if content.field_example['#object'] is defined  %}

しかし、最善の方法は何ですか?


1
hook_preprocessを使用し、プログラムでチェックします。インジケータ変数を追加することもできます。そうでなければ、4k4が書いたもの。

回答:


21

ノードテンプレートでエンティティ参照からフィールドをレンダリングするにどうすればいいですか?[Drupal 8]、コンテンツは表示用に準備されたデータを含むレンダー配列です。

何かを確認または比較する場合は、代わりにノードオブジェクトで使用可能な値を使用します。

{% if node.field_example.value %}

プロパティはフィールドタイプに依存することに注意してください。参照フィールドの場合、代わりにtarget_idを使用する必要があります。参照されている質問は、一般的なフィールドタイプとそのプロパティをリストするエンティティフィールドAPIチートシートにリンクしています。


画像フィールド{%node.field_article_image.target_id%}の場合
Yogesh Kushwaha

13

コンテンツ内のレンダー配列の構造がわからないため、これは最善の方法ではありません。

これはより良い解決策かもしれません:

{% if content.field_example|render|striptags|trim %}
  <p>field is not empty</p>
{% endif %}

これにより、フィールドのレンダリングで出力が生成されるかどうかがチェックされます。

しかし、これは、フィールド形式の設定方法と、何をしようとしているかによって異なります。たとえば、フィールドが空の場合にラベルを表示するように構成できます。次に、これを調整する必要があります。レンダリングされた出力に依存せず、チェックするだけの場合、データベースにフィールドの値がある場合は、ノードオブジェクトを使用します。Berdirの回答を参照してください。


Berdirの答えはより柔軟だからです。
-sainf

4k4 @:|renderフィールドテンプレートからランダム空白の問題のために十分ではありません、このリンクを参照してください:小枝テンプレートで空のフィールドのチェックを複雑化される
Mojtaba Reyhani

@MojtabaReyhani:ありがとう、すばらしい発見。このリンクdrupal.org/node/2783633#comment-11510195を見つけました。これをコードに追加しました。
4k4

4

Twigテンプレート(Field Collection
テンプレートでフィールドが空でないかどうかを確認します:field-collection-item--field-services.html.twig

| field_value」に続いて「is not empty」 を使用して値を取得するために、Field Twig Valueモジュールをインストールします

{% if content.field_work|field_value is not empty %}

       ...

{% endif %} 

1
{% if not (node.field_whatever.isEmpty == true) and content.field_whatever is defined %}
  <div class="whatever_markup">
    {{ content.field_whatever }}
  </div>
{% endif %}

このソリューションは非常に防弾であり、再利用および/または共有テンプレート(たとえば、node--teaser.html.twig複数のバンドル間で共有)でも動作します。

  • すべてのフィールドタイプで機能します
  • フィールドが存在するかどうかを確認します
  • フィールドが空でないかどうかをチェックします
  • 表示モードでフィールドが非表示になっていないかどうかを確認します

ダブルネガティブnot ...isEmpty == trueが必要です。そうでない場合、存在しないフィールドはチェックに失敗します。また、私のソリューションは、フィールドのレンダリングを伴うチェックよりもはるかに速く、エラーに対して回復力があると考えています。

これは、あなたは、単に置き換えることができ、たとえば、任意のエンティティテンプレートのために働く必要node.field_xxxparagraph.field_xxxしてparagraph.html.twigテンプレートファイル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.