Quero renderizar uma imagem como imagem de fundo por meio de um estilo embutido no galho. Criei um campo chamado bg_image e o anexei à página simples padrão.
Depois de mexer por horas, consegui obter o URL da imagem em node.html.twig
{{ file_url(node.field_bg_image.0.entity.uri.value) }}
mas não consegui fazê-lo funcionar dentro do campo - field-bg_image.html.twig
Posso obter o nó de qualquer maneira para obter a imagem?
Como posso obter o URL da imagem para usar como estilo embutido? Eu pensei que talvez eu possa passar uma variável do campo - field-bg_image.html.twig para image.html.twig e depois apenas renderizar
{{ uri }}
ao invés de
<img{{ attributes.addClass(classes) }} />
mas não consegui passar a variável para lá, a menos que eu use include
{% include 'image.html.twig' with {'image': image, 'isFromField': isFromField} %}
(isFromField é verdadeiro quando se trata do campo - field-bg_image.html.twig) Mas isso também não funcionou. A imagem nunca foi renderizada dessa maneira.
Ficaria muito feliz se você puder ajudar - meu conhecimento de php é muito básico. obrigado
Respostas:
A variável
node
é pré-carregada apenas no modelo do nó (e no modelo da página, se o URL contiver o nó). Agora, se você quiser acessar os campos dos nós em um modelo de campo, precisará procurar em um local diferente:field.html.twig:
element['#object']
é a entidade pai em um modelo de campo e você pode acessar qualquer campo dessa entidade (no seu caso, o nó).Se você deseja acessar valores brutos a partir do campo real, é melhor seguir a lógica do galho do campo e acessar o valor dentro do loop de itens diretamente do objeto do item de campo
#item
:Editar: obter o URL de um estilo de imagem
Instale o módulo Twig Tweak e você pode usar a uri para obter a URL de um estilo de imagem:
fonte
Apenas para mencionar que se você quiser fazer o mesmo em um dos novos blocos personalizados, isso funcionará:
fonte
Eu uso esse código no meu arquivo .theme:
Pode ser melhorado. Estou verificando o campo da imagem e carregando seu URL com um estilo de imagem.
Então, no meu nó - arquivo page.html.twig, tenho o seguinte:
Novamente, isso poderia melhorar. obrigado
fonte
Eu faria de outra maneira. Na função de pré-processo do nó:
Em seguida, em seu modelo (nó - NODETYPE.html.twig), apenas renderize a imagem dessa maneira:
Embora, se você precisar renderizar uma grande quantidade de imagens, recomendo que você carregue os estilos em uma matriz antes de repetir cada imagem. Estou dizendo que, como tive problemas sérios no tempo de carregamento, porque precisei carregar mais de 300 imagens e, para cada imagem, carregava o estilo individualmente, em vez de carregá-las todas antes, aqui está um exemplo, a mesma base acima:
Então, novamente, em seu modelo (nó - NODETYPE.html.twig), apenas renderize as imagens dessa maneira:
Eu realmente não testei e estou tirando tudo isso da minha cabeça para que possa conter erros, fique à vontade para me avisar para corrigir isso :-).
fonte
Eu tive algum sucesso usando o Módulo de Imagem de Fundo quando o caso de uso permite. Uso uma dessas opções de código quando preciso de uma estrutura DOM personalizada.
fonte