Eu tento incorporar uma exibição em um nó específico. Encontrei tutoriais para fazer isso com o Drupal 7 e o PHP-Templates:
<?php print views_embed_view('view_name'); ?>
Mas eu procuro uma maneira no Drupal 8 com modelos de galho. Tentei chamar a views_embed_view()
função no hook_node_view()
e atribuí-lo ao nó para que eu possa imprimi-lo no modelo galho. Mas parece que esse gancho nunca é chamado.
Alguma dica / solução de como fazer isso no Drupal 8?
Foi assim que funcionou para mim no subtema Drupal 8 beta 12 do Classy.
No arquivo your_theme.info.theme
Copiei o node.html.twig e coloquei as tags dos artigos (ou a área que você deseja substituir) com um bloco de galho. Coloquei isso na pasta / template / content.
Então, criei um nó - 2.html.twig (substitua 2 pelo nó desejado) na pasta / template / content com o seguinte código.
fonte
O primeiro problema com o qual você está lutando é que entidades renderizadas, como nós, agora são armazenadas em cache por padrão; portanto, hook_node_view () é chamado apenas uma vez após o cache limpar / salvar esse nó.
No entanto, isso é bastante fácil de desativar, consulte settings.local.php.
Em seguida, colocar a saída de uma visualização em $ build é bastante fácil e mais ou menos funciona como no 7.x. Em vez de usar a função incorporar, considere usar $ views = Views :: getView () e depois $ views-> buildRenderable ()
Duas dicas:
fonte
settings.local.php
e limpei todos os caches. Mas o meu anzolthemename_node_view()
nothemename.theme
ainda não é chamado. Você tem alguma idéia de por que esse poderia ser o caso?Como Berdir aludiu a View-> buildRenderable é o que você está procurando, mas para fornecer mais contexto em um módulo, você precisará fazer o seguinte.
Em seguida, no seu modelo de página, você pode acessá-lo com
fonte
Nas visualizações, você pode criar um bloco com seus dados relevantes.
Após a criação do bloco, você pode atribuir o bloco a aparecer na área de conteúdo desejada (rodapé / cabeçalho / conteúdo / etc). Atribua e clique em "configurar". Você deve conseguir "Mostrar bloco em páginas específicas". A seleção de "Apenas as páginas listadas" e a adição de / node / your-node-number à especificação da página devem limitar essa exibição / bloco a aparecer apenas com o nó desejado.
Felicidades!
fonte
views_embed_view()
abordagem é muito mais fácil e limpa, eu acho.Eu sei que você mencionou que gostaria de usar modelos de galho, mas você poderia usar o módulo Campo de Referência de Vistas para evitar ter que procurar em modelos. Também oferece a vantagem de poder adicioná-lo a qualquer entidade em campo para que os editores de conteúdo possam configurar a visualização / saída.
fonte