it-swarm-eu.dev

Jak získám přístup k datům pole v programu Twig?

Mám pole seznamu pro vlastní typ bloku, který vypadá takto:

left|Align left
right|Align right

K klíči se dostanu v Twig) provedením něčeho takového:

{% block content %}
  {{ content.field_align }}  {# outputs 'right' #}
{% endblock %}

Pokud však provedu jednoduché srovnání, vydá výstup FALSE.

{{ kint(content.field_align == 'right') }}

Následující kód vrátí TRUE.

{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}

Existuje kratší verze pro získání „skutečného“ řetězce, abych mohl použít filtry Twigs string a udržovat je uklizené?

15
estrar

content obsahuje vykreslovací pole založená na nakonfigurovaných formátovačích.

Pokud chcete získat přístup ke skutečným hodnotám, chcete je získat prostřednictvím objektu entity. Obvykle je to již k dispozici pro vaši šablonu, například node. Pro váš případ je to trochu zvláštní, protože block_content je vykreslen v obsahu bloku bez vlastní šablony, takže je musíte sami zpřístupnit v yourtheme_preprocess_block($variables) takto:

if (isset($variables['elements']['content']['#block_content'])) {
  $variables['block_content'] = $variables['elements']['content']['#block_content'];
}

Poté můžete získat přístup k hodnotě pole pomocí block_content.field_name.property. Takže ve vašem případě block_content.field_align.value. Vlastnost je value pro většinu typů polí, pro reference můžete použít target_id pro ID nebo entity pro objekt odkazované entity. Ano, můžete přímo přistupovat k polím, ale vždy zkontrolujte, zda existuje odkaz, jinak můžete skončit fatálními chybami nebo výjimkami. Chcete-li například získat přístup k označení termínového odkazu, můžete k němu přistupovat jako block_content.field_tags.entity.name.value.

Pokud nezadáte delta pole, bude výchozí hodnota první. Pokud chcete získat přístup k jiné deltě, můžete použít entity.field_name.1.valuea tak dále. Můžete také přes ně smyčky.

To vše mapuje přímo do PHP, můžete také udělat $block_content->field_tags->entity->name->value v předzpracování a na dalších místech, kde máte blok_content.

16
Berdir

Zde je alternativní způsob, který umožňuje pouze vykreslit matici vykreslení a zkontrolovat její hodnotu (umožňuje kontrolu proměnné, jako kdybyste ji tiskli, protože tisk v Drupal 8 Twig automaticky vykreslí proměnné, které jsou renderovacími poli):

{{ kint(content.field_align|render == 'right') }}

Nebo další možnost uložení extra vykreslení, pokud proměnnou tisknete později:

{% set field_align = content.field_align|render %}
{{ kint(field_align == 'right') }}

{{ field_align }}
6
Cottser

V tomto případě můžete použít modul hodnota pole větvičky. Umožňuje získat částečná data z polí renderovacích polí. Například content.field_name | field_value - hodnota pole. Můžete jej použít v příkazu IF

2
Andrew Kozoriz