Как сделать модуль абзацев в ветке

8

Я создаю собственный шаблон для своей темы и создаю страницу page.html.twig. Я хочу вызвать отдельные поля узла в отдельные строки. Я был в состоянии успешно отобразить все, кроме поля абзаца.

Я пытался.

{{ node.field_benefits }}
{{ node.field_benefits.value }}
{{ paragraph.field_benefits }}
{{ paragraph.field_benefits.value }}
{{ node.paragraphs.field_benefits }}

И ничего не сработало. Кто-нибудь имеет представление о правильной структуре для вызова в модуле абзаца?

Или бы для работы функции

{% if node.field_benefits %}
{% for field_items in node.field_benefits %}
{{ field_item.value }}
{% endfor %}
{% endif %}
Меган Макгоуэн
источник
page.html.twig не обрабатывает узлы ... только общий шаблон страницы. Вы используете неправильный шаблон. Вместо этого я предлагаю переопределить шаблон узла (или, по крайней мере, прочитать о том, как осуществляется доступ к шаблонам веток). Кроме того, включение отладки веток и просмотр исходного кода поможет вам определить, какой шаблон вы должны переопределить.
NikLP
Хорошо, @NikLP. Я переместил все на уровень узла, но все еще не могу отобразить модуль абзацев - я использую поле, полученное в результате отладки и kint, и все равно он показывает пустую строку
Меган МакГоуэн
Может проверить это? drupal.org/node/2444893
NikLP

Ответы:

7

Сначала добавьте paragraph--your_paragraph_machine_name.html.twigв каталог шаблонов вашей темы.

Доступ к полям абзаца можно сделать, добавив переменные ветки в формате, аналогичном {{ content.field_your_field }}.

Если вам нужно только значение поля, это немного сложнее. Например, если у вас есть поле List (текст) и вы хотите получить значение из выбранной опции, вы можете сделать что-то вроде:

{% for item in content.field_select_list %}
  {% if item is iterable %}
    {% for key,value in item %}
      {% if not value is iterable %}
        {% if key == '#markup' %}
          {{ value }}
        {% endif %}
      {% endif %}
    {% endfor %}
  {% endif %}
{% endfor %}

Вы всегда можете запустить a, {{ dump(content) }}чтобы увидеть структуру и получить значения, которые вы ищете. Надеюсь это поможет!

РЕДАКТИРОВАТЬ: Вы можете избежать всех глупых вложенных циклов. Приведенный выше пример должен быть написан так:

{% set value = content.field_select_list.0['#markup'] %}
{{ value }}

Для текстового (простого) поля это может выглядеть примерно так:

{{ content.field_text.0['#context'].value }}

Чтобы получить значение URL из поля «Ссылка», я видел следующие предложения:

{{ content.field_link['#items'].0.value.uri }}

Но у него будет префикс «internal: /», так что мне повезет больше с чем-то вроде этого:

{{ content.field_link.0['#title'] %}
jimafisk
источник
Вы можете использовать paragraph.field_my_text.valueлюбой шаблон абзаца для вывода простого неформатированного значения, как node.field_my_text.valueв шаблоне узла.
Филипп Майкл
как вы печатаете абзац - your_paragraph_machine_name.html.twig из вашего основного шаблона?
Сэм