次のようなカスタムブロックタイプのリストフィールドがあります。
left|Align left
right|Align right
Twigのキーにアクセスするには、次のようにします。
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
ただし、単純な比較を行うと、FALSE
が出力されます。
{{ kint(content.field_align == 'right') }}
次のコードはTRUE
を返します。
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
「本当の」文字列を取得するための短いバージョンはありますか?Twigs文字列フィルターを使用して整頓できますか?
content
には、構成されたフォーマッターに基づくレンダー配列が含まれています。
実際の値にアクセスする場合は、エンティティオブジェクトを介してアクセスする必要があります。通常、これはテンプレートですでに利用可能です(例:node
)。あなたのケースでは、block_contentは独自のテンプレートなしでブロックコンテンツにレンダリングされるため、次のようにyourtheme_preprocess_block($variables)
で使用できるようにする必要があるため、少し特殊です。
if (isset($variables['elements']['content']['#block_content'])) {
$variables['block_content'] = $variables['elements']['content']['#block_content'];
}
次に、block_content.field_name.property
を使用してフィールド値にアクセスできます。したがって、あなたの場合、block_content.field_align.value
。ほとんどのフィールドタイプのプロパティはvalue
です。参照の場合、IDにtarget_id
を使用するか、参照されるエンティティオブジェクトにentity
を使用できます。はい、そのフィールドに直接アクセスできますが、参照が存在することを必ず確認してください。そうしないと、致命的なエラーや例外が発生する可能性があります。たとえば用語参照のラベルにアクセスするには、block_content.field_tags.entity.name.value
としてアクセスできます。
フィールドのデルタを指定しない場合、デフォルトで最初に設定されます。別のデルタにアクセスする場合は、entity.field_name.1.value
などを使用できます。それらをループすることもできます。
これはすべてPHPに直接マッピングされます。また、block_contentがあるプリプロセスやその他の場所で$block_content->field_tags->entity->name->value
を実行することもできます。
これは、レンダー配列をレンダリングしてその値をチェックできる、テンプレートのみの代替方法です(Drupal 8 Twigはレンダー配列である変数を自動的にレンダリングします):
{{ kint(content.field_align|render == 'right') }}
または、後で変数を印刷する場合に追加のレンダリングを保存する別のオプション:
{% set field_align = content.field_align|render %}
{{ kint(field_align == 'right') }}
{{ field_align }}
この場合、Twig Field Valueモジュールを使用できます。フィールドレンダー配列から部分データを取得できます。例のために。 content.field_name | field_value-フィールドの値を取得します。 IFステートメントで使用できます