Mam pole listy dla niestandardowego typu bloku, który wygląda następująco:
left|Align left
right|Align right
Mogę uzyskać dostęp do klucza w Twig, wykonując coś takiego:
{% block content %}
{{ content.field_align }} {# outputs 'right' #}
{% endblock %}
Jeśli jednak zrobię proste porównanie, wynik będzie FALSE
.
{{ kint(content.field_align == 'right') }}
Zwraca następujący kod TRUE
.
{{ kint(content.field_align['#items'].getValue()|first.value == 'right') }}
Czy istnieje krótsza wersja pozwalająca uzyskać „prawdziwy” ciąg, dzięki czemu mogę używać filtrów ciągów Twigs i utrzymywać porządek?
Odpowiedzi:
content
zawiera tablice renderujące oparte na skonfigurowanych formatatorach.Jeśli chcesz uzyskać dostęp do rzeczywistych wartości, chcesz uzyskać do nich dostęp poprzez obiekt encji. Zwykle jest to już dostępne na przykład w szablonie
node
. W twoim przypadku jest to trochę wyjątkowe, ponieważ zawartość bloku jest renderowana w treści bloku bez własnego szablonu, więc musisz udostępnić ją w następujący sposóbyourtheme_preprocess_block($variables)
:Następnie możesz uzyskać dostęp do wartości pola za pomocą
block_content.field_name.property
. Więc w twoim przypadkublock_content.field_align.value
. Właściwość dotyczyvalue
większości typów pól. W przypadku odwołań można użyćtarget_id
identyfikatora lubentity
obiektu encji , do której istnieje odwołanie. Tak, możesz bezpośrednio uzyskać do niego dostęp do pól, ale pamiętaj, aby zawsze sprawdzać, czy istnieje odwołanie, w przeciwnym razie mogą wystąpić poważne błędy lub wyjątki. Aby na przykład uzyskać dostęp do etykiety odwołania do terminu, możesz uzyskać do niego dostęp jakoblock_content.field_tags.entity.name.value
.Jeśli nie określisz delty pola, domyślnie będzie to pierwsza. Jeśli chcesz uzyskać dostęp do innej delty, możesz użyć
entity.field_name.1.value
i tak dalej. Możesz także nad nimi zapętlić.To wszystko mapuje bezpośrednio na PHP, możesz to zrobić również
$block_content->field_tags->entity->name->value
w procesie wstępnym i innych miejscach, w których masz zawartość block_content.źródło
block_content.field_name.value
Dziękuję za pomoc w zrozumieniu!Oto alternatywny sposób, tylko szablonowy, który pozwala renderować tablicę renderującą i sprawdzać jej wartość (pozwala sprawdzać zmienną tak, jakbyś ją drukował, ponieważ drukowanie w Drupal 8 Twig automatycznie renderuje zmienne, które są tablicami renderującymi):
Lub inna opcja zapisania dodatkowego renderowania, jeśli drukujesz zmienną później:
źródło
W takim przypadku możesz użyć modułu Twig Field Value . Pozwala uzyskać częściowe dane z tablic renderujących pola. Np. content.field_name | field_value -get wartość pola. Możesz go użyć w instrukcji IF
źródło