Como renderizar o módulo de parágrafos em galho

8

Estou criando um modelo personalizado para o meu tema e construindo uma página page.html.twig. Quero chamar os campos dos nós individuais em linhas separadas. Consegui exibir com êxito tudo, exceto o campo de parágrafo.

Eu tentei.

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

E nada funcionou. Alguém tem alguma idéia da estrutura correta para chamar no módulo de parágrafo?

Ou seria um trabalho de função

{% if node.field_benefits %}
{% for field_items in node.field_benefits %}
{{ field_item.value }}
{% endfor %}
{% endif %}
Megan McGowan
fonte
O page.html.twig não trata de nós ... apenas o modelo geral da página. Você está usando o modelo errado. Eu sugiro que você substitua o modelo de nó (ou pelo menos leia sobre a maneira como os modelos de galho são acessados). Além disso, ativar a depuração do galho e observar o código-fonte ajudará a determinar qual modelo você deve substituir.
NikLP
Ok @NikLP me mudei tudo para o nível de nó, mas eu ainda sou incapaz de processar o módulo parágrafos - Estou usando o campo que tenho obtido a partir de depuração e kint e ainda mostra uma linha vazia
Megan McGowan
Talvez verifique isso? drupal.org/node/2444893
NikLP

Respostas:

7

Primeiro adicione um paragraph--your_paragraph_machine_name.html.twigao diretório de modelos do seu tema.

O acesso aos campos de parágrafo pode ser feito adicionando variáveis ​​de galho em um formato semelhante a {{ content.field_your_field }}.

Se você deseja apenas o valor do campo, isso é um pouco mais complicado. Por exemplo, se você tivesse um campo Lista (texto) e desejasse obter o valor da opção selecionada, poderia fazer algo como:

{% 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 %}

Você sempre pode executar a {{ dump(content) }}para ver a estrutura e obter os valores que procura. Espero que isto ajude!

Edição: você pode evitar todos os loops aninhados bobo. O exemplo acima deve ser escrito como:

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

Para um campo de texto (simples), pode ser algo como:

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

Para obter um valor de URL de um campo Link, já vi sugestões como:

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

Mas ele teria um prefixo "internal: /", então tive melhor sorte com algo assim:

{{ content.field_link.0['#title'] %}
jimafisk
fonte
Você pode usar paragraph.field_my_text.valueem qualquer modelo de parágrafo para gerar o valor simples e não formatado, como node.field_my_text.valueem um modelo de nó.
Philipp Michael
como você imprime o parágrafo - your_paragraph_machine_name.html.twig do seu modelo principal?
Sam