Як отримати доступ до даних поля в Twig?


15

У мене є список списку для користувацького типу блоку, який виглядає приблизно так:

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 і тримати його в порядку?


Відповіді:


16

content містить масиви візуалізації на основі налаштованих форматорів.

Якщо ви хочете отримати доступ до фактичних значень, ви хочете отримати доступ до них через об'єкт сутності. Зазвичай, це доступно, наприклад, у вашому шаблоні, наприклад node. Для вашого випадку він дещо особливий, оскільки блок_контент відображається у вмісті блоку без власного шаблону, тому вам потрібно зробити його доступним у 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для більшості типів полів, для довідок ви можете використовувати або target_idдля ідентифікатора, або entityдля об'єкта, на який посилається особа. Так, ви можете безпосередньо отримати доступ до полів на цьому, але переконайтеся, що завжди перевіряйте, чи існує посилання, інакше ви можете виявити фатальні помилки або винятки. Наприклад, щоб отримати доступ до мітки посилання терміна, ви можете отримати доступ до нього як block_content.field_tags.entity.name.value.

Якщо ви не вказали дельту поля, вона за замовчуванням застосовується до першої. Якщо ви хочете отримати доступ до іншої дельти, ви можете використовувати entity.field_name.1.valueтощо. Ви також можете петлювати над ними.

Це все відображається безпосередньо на PHP, ви також можете робити $block_content->field_tags->entity->name->valueв попередній обробці та інших місцях, де у вас є блок_контент.


Дякую за вашу відповідь! Оскільки я це роблю з шаблону блокової гілочки, де об’єкт вузла недоступний (підтематизація "Класичний"), мені потрібно буде попередньо обробити значення та якось вставити їх?
estrar

Вибачте, я пропустив частину block_content. Оновлено відповідь.
Бердір

Ідеально! Я міг би отримати цінності, зробивши це: block_content.field_name.value Дякую, що допомогли мені зрозуміти!
estrar

6

Ось альтернативний варіант, лише для шаблону, який дозволяє надати матрицю візуалізації та перевірити її значення (дозволяє перевірити змінну так, як ніби ви її друкували, оскільки друк у Drupal 8 Twig автоматично видає змінні, що представляють масиви):

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

Або інший варіант збереження додаткового візуалізації, якщо ви друкуєте змінну пізніше:

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

{{ field_align }}

Дуже корисно і добре знати! Дякуємо за вклад.
estrar

2

У цьому випадку можна використовувати модуль Twig Field Value . Це дозволяє отримати часткові дані з масивів польових візуалізацій. Для екс. content.field_name | field_value - значення поля. Ви можете використовувати його в операторі IF

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.