Мне нужно установить значение поля как класс CSS в шаблоне страницы. Как я могу сделать это способом Twig?
{{attributes.addClass('class-name')}}
это способ установить класс вручную.
У меня есть поле списка, чтобы пользователь мог установить цвет фона для части сайта. В Drupal 7 я использовал этот код.
<div class="<?php print render($content['field_background']); ?>">
В Drupal 8 я могу напечатать поле {{ content.field_background }}
, но <div class="{{ content.field_background }}">
не работает.
{% set classes = [ ...
затем распечатать классы как,<article{{ attributes.addClass(classes) }}>
либо вы можете сделать что-то подобное<div{{ content_attributes.addClass('foobar' | clean_class) }}>
. Как сказано в примечании выше, я думаю, что нам нужно больше информации. Если вы хотите получить значение поля в качестве класса, это также поможет использовать отладку Kint и Twig, и вам может потребоваться установить переменную с функцией предварительной обработки, но, возможно, в этом нет необходимости.Ответы:
Это может быть сделано несколькими способами, вы можете сделать все это в шаблоне узла с помощью Twig или вы можете создать функцию предварительной обработки и создать переменную для использования в шаблоне узла. Ключом к изучению того, что находится в массиве, является использование Devel Kint. Без этого вы не узнаете, что находится в массиве.
Сначала установите Kint, который поставляется с модулем Devel для Drupal 8. Затем выберите шаблон вашего узла (но это можно сделать в любом типе шаблона) и изучите переменную содержимого следующим образом (в идеале внизу шаблона).
Отсюда мы получаем отладочную информацию, напечатанную на странице, и если вы развернете массив, вы увидите целую кучу информации. Сразу же я вижу свое фоновое значение и могу построить путь для его распечатки как
Теперь вы можете напечатать это как фоновый стиль или класс в div
Я проверил это, и он отлично работает, div отображает цвет фона, который я выбрал в списке полей при редактировании узла.
Теперь это не идеально, поэтому мы, вероятно, хотим создать переменную для этого в preprocess_node в файле .theme нашей темы.
Теперь, когда у меня есть созданная переменная, гораздо удобнее ее распечатать:
Одно замечание выше, вы, вероятно, должны заключить это в выражение if, чтобы проверить, пусто оно или нет.
Это будет работать или структурировать оператор if там, где вам это нравится
источник
В шаблоне узла поля находятся в
{{ content }}
. В шаблоне страницы нет переменной содержимого, вместо этого есть переменная страницы, которая содержит регионы{{ page.region }}
.Так как вы спросили о шаблоне страницы, мы не можем использовать
content
.Но вы можете использовать {{node}} в обоих шаблонах. Объект узла всегда находится в шаблоне узла и в шаблоне страницы, когда страница отображает узел.
Так что это должно работать в обоих шаблонах:
источник
fielditemlist
.value
получает с некоторой магией ветки и объекта поля значение первого элемента. В многозначном поле вы можете получить доступ к любому элементу, вставив число, начинающееся с нуля:node.field_myfield.0.value