Eu tenho um campo de imagem no meu tipo de conteúdo (field_hero_image).
Não quero que ele seja renderizado no arquivo node.html.twig. No entanto, eu quero renderizá-lo no arquivo page.html.twig. Especificamente, quero renderizá-lo ao lado do título da página.
Que código eu usaria no meu arquivo page.html.twig para acessar os campos no nível do nó e renderizá-los?
(Existe uma pergunta semelhante postada, mas não consegui usar a resposta fornecida para resolver meu problema.)
Isso para o tema Drupal 8.
Respostas:
Depois de fazer um pouco mais de pesquisa, consegui encontrar peças suficientes em outras perguntas e no drupal.org para alcançar o que queria fazer.
Não é necessário pré-processamento para esta resposta, portanto, nenhum código precisa ser adicionado ao seu arquivo mytheme.theme.
Todas essas variáveis já estão acessíveis em page.html.twig por padrão.
Para renderizar o valor padrão de um campo em page.html.twig, você normalmente usaria uma variável Twig como em
{{ node.field_some_name.value }}
.Se você possui um campo de imagem e deseja renderizar o URL para a imagem armazenada nesse campo dentro do modelo page.html.twig, use-o
{{ file_url(node.field_some_image.entity.fileuri) }}
.Por fim, se você deseja renderizar o título de um nó dentro do modelo page.html.twig, use-o
{{ node.label }}
.Também aprendi como usar alguns condicionais do Twig para meu problema específico, mas isso está além do escopo desta pergunta / resposta.
fonte
file_url()
documentos ( drupal.org/docs/8/theming/twig/functions-in-twig-templates ) faz exatamente isso, portanto, com o voto positivo.page.html.twig
?Existem três métodos úteis para trabalhar com isso, os quais economizam seu tempo procurando em matrizes de renderização complicadas.
Usando o Display Suite (com o submódulo ds_extras), você pode atribuir à região do herói um bloco ("região do bloco") que é um modo de exibição diferente (ou seja, apenas um que contém a imagem do herói). Assim, você obtém dois modos de exibição diferentes exibidos ao mesmo tempo. Observe que alguns ganchos de pré-processamento podem não ser acionados conforme o esperado, se você fizer isso.
O módulo twig_tweak simplifica bastante essas tarefas e pode fornecer instruções twig mais fáceis para os valores dos campos. Dê uma olhada na folha de dicas para alguns usos comuns:
{{ drupal_field('field_image', 'node', 1) }}
A assinatura da função é:drupalField($field_name, $entity_type, $id = NULL, $view_mode = 'default', $langcode = NULL)
O módulo twig_field_value faz declarações de galhos mais simples. Por README.txt:
<img src={{ file_url(content.field_image|field_target_entity.uri.value) }} alt={{ content.field_image|field_raw('alt') }} />
Se eu soubesse disso antes, teria me poupado muito tempo!
fonte
{{ node.field_some_name.value }}
não processa o campo. Ele não chama o sistema de tema completo (função de pré-processamento, modelo, etc.). OTOH, se você usar otwig_tweak
módulo, poderá obter o campo totalmente renderizado com{{ node.field_some_name|view }}