У меня есть поле списка для пользовательского типа блока, который выглядит следующим образом:
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)
следующим образом:Затем вы можете получить доступ к значению поля с помощью
block_content.field_name.property
. Так что в вашем случаеblock_content.field_align.value
. Это свойство предназначеноvalue
для большинства типов полей, для ссылок вы можете использовать либоtarget_id
идентификатор, либоentity
объект ссылочной сущности. Да, вы можете напрямую обращаться к этим полям, но всегда проверяйте, существует ли ссылка, иначе вы можете получить фатальные ошибки или исключения. Например, чтобы получить доступ к метке ссылки на термин, вы можете получить к ней доступ какblock_content.field_tags.entity.name.value
.Если вы не укажете поле delta, по умолчанию оно будет первым. Если вы хотите получить доступ к другой дельте, вы можете использовать
entity.field_name.1.value
и так далее. Вы также можете зациклить их.Все это отображается непосредственно в PHP, вы также можете сделать это
$block_content->field_tags->entity->name->value
в preprocess и других местах, где у вас есть block_content.источник
block_content.field_name.value
Спасибо, что помогли мне понять!Вот альтернативный, единственный шаблонный способ, который позволяет вам визуализировать массив рендеринга и проверить его значение (позволяет проверять переменную, как если бы вы ее печатали, потому что печать в Drupal 8 Twig автоматически рендерит переменные, которые являются массивами рендеринга):
Или другой вариант, чтобы сохранить дополнительный рендер, если вы печатаете переменную позже:
источник
В этом случае вы можете использовать модуль Twig Field Value . Это позволяет получать частичные данные из массивов рендеринга полей. Например content.field_name | field_value -get значение поля. Вы можете использовать его в заявлении IF
источник