Preciso renderizar um bloco de visualizações no meu modelo page.html.twig. Em D7 eu faria isso:
<?php
$block = module_invoke('module_name', 'block_view', 'block_delta');
print render($block['content']);
?>
No Drupal 8 module_invoke está obsoleto e é recomendável usar isso: (adicionei o nome do bloco como o segundo parâmetro)
Drupal::moduleHandler()->invoke($block, 'views_block__blog_block_1', $args = array());
Eu tentei algumas coisas. Primeiro tentei fazê-lo em um modelo de galho, mas não sei como chamar funções php em um modelo de galho, de modo que não resultou muito bem.
Em seguida, chamei a função na função preprocess_page () no arquivo .theme, mas antes que eu pudesse funcionar, tentei algo mais simples, apenas para fazer uma variável funcionar dentro do modelo de galho que também não funcionava, por exemplo:
Na função template_preprocess_page (& $ vars) no arquivo .theme:
$test = 'Hello World';
$vars['$my_var'] = $test;
Tentei ligar para my_var dentro do modelo de galho, mas não funcionou e recebi uma mensagem de erro dizendo "O site está com um erro, entre em contato com o administrador"
Então, para resumir, aqui estão minhas perguntas:
- Como disponibilizo variáveis dentro de modelos de galho?
- Como chamo funções dentro de modelos de galho?
- Eu renderizo blocos dentro do arquivo .theme ou modelo de galho?
No Drupal 8, isso funciona para renderizar um plug-in de bloco (ou seja, que você criou em um módulo personalizado) em um preprocess_hook:
Você pode renderizá-lo em seu modelo de galho da seguinte forma:
Nota: isso carregará uma versão genérica do seu bloco. Se você deseja carregar uma instância do seu bloco com variáveis (depois de criá-la em / admin / structure / block), você deve carregá-la desta maneira:
fonte
Você pode usar o módulo Twig tweak para isso, e pode usar a seguinte sintaxe:
Relacionado: Como colocar programaticamente um bloco?
fonte