Eu preciso assumir o controle sobre a renderização de um field_admin_tags
campo em um node.html.twig
modelo.
Isso funciona:
{{ content.field_admin_tags }}
- Renderiza tudo (rótulo + todos os valores do campo){{ content.field_admin_tags.0 }}
- Renderiza apenas o primeiro valor no campo e nenhum rótulo
PROBLEMA: Não tenho controle sobre a marcação em torno das tags, por exemplo <ul><li>...</li></ul>
.
Então, minha idéia foi iterar sobre a matriz de renderização .
Mas isso NÃO funciona:
{% for tag in content.field_admin_tags %}
{{ tag }}
{% endfor %}
Eu recebo: Exception: Object of type Drupal\node\Entity\Node cannot be printed
.
Eu acho que estou iterando sobre as chaves / valores da matriz de renderização versus os itens dentro do campo (se eu imprimir um "X" em cada loop, recebo 20 Xs enquanto tenho apenas dois ou três valores nesse campo) .
Eu gostaria de iterar content.field_admin_tags.0
, content.field_admin_tags.1
etc.
Alguma idéia de como consertar isso? Obrigado.
Respostas:
Você pode corrigir isso em um galho de campo. Lá você pode usar o loop existente para iterar sobre os itens de campo:
node.html.twig
campo - campo-admin-tags.html.twig
Este exemplo substitui
<div>
por<ul>
. Não remova{{ attributes }}
ou ignore o modelo de campo, consulte O que pode interromper o quickedit e como corrigi-lo?fonte
{{ content.field_admin_tags }}
Concorde com 4k4, o modelo de campo é o melhor local; se você realmente deseja no modelo de entidade (por exemplo, nó), pode fazer algo assim:
Mas, honestamente, acho um pouco feio, o modelo de campo é o lugar certo.
fonte
Se você, como eu, está procurando uma maneira de percorrer parágrafos no modelo de galho de um nó, eis como fazê-lo:
Suponha que você tenha um nó com um campo de vários valores, para que um editor de conteúdo possa criar vários parágrafos e deseje percorrer cada parágrafo no modelo de ramificação dos nós (por exemplo, para adicionar um wrapper a cada parágrafo):
ATUALIZAÇÃO: Eu precisava encontrar outra maneira de imprimir todos os parágrafos sem usar o conteúdo. A variável content contém tudo o que você configurou na seção 'Gerenciar exibição' do nó, mas meu método de trabalho atual é nunca usar 'Gerenciar exibição' nem layouts, pois é possível acessar todos os dados no arquivo ramificado do nó e quase todos configurações que você faria em 'Gerenciar exibição', como aplicar um estilo de imagem ou definir um formato de data, ... você pode fazer diretamente no galho.
Para mim, isso é uma vantagem, porque sei que tudo o que vejo vem do arquivo twig e não preciso procurar por algumas configurações de campo obscuras que podem adicionar classes em algum lugar. Então, tudo o que vejo vem de apenas um lugar (o arquivo de nós de galho) e não uma combinação do arquivo de galho e da tela de exibição de gerenciamento.
De qualquer forma, usando o incrível módulo Twig Tweak, eis como imprimir um campo de parágrafo com vários valores no arquivo twig de um nó sem precisar usar a variável content:
fonte
Eu achei a
#items
propriedade útil ao criar loops de comprimento desconhecido no Twig:fonte
Se você deseja colocar wrappers adicionais ao redor dos campos dentro do campo de parágrafo ou precisar, por algum motivo, de um valor específico do campo de referência de parágrafo, faça o seguinte:
Ao fazer isso
{{kint(content.paragraph_field_name[key])}}
, você verá que os campos estão acessíveis dentro da parte ['#paragraph'] da matriz.fonte