Necesito representar un bloque de vistas en mi plantilla page.html.twig. En D7 haría esto:
<?php
$block = module_invoke('module_name', 'block_view', 'block_delta');
print render($block['content']);
?>
En Drupal 8 module_invoke está en desuso y se recomienda usar esto: (he agregado el nombre del bloque como segundo parámetro)
Drupal::moduleHandler()->invoke($block, 'views_block__blog_block_1', $args = array());
Intenté algunas cosas. Primero intenté hacerlo en una plantilla de ramita, pero no sé cómo llamar a las funciones de php en una plantilla de ramita, por lo que no resultó demasiado bien.
Luego llamé a la función en la función preprocess_page () en el archivo .theme, pero antes de que pudiera funcionar, intenté algo más simple solo para intentar hacer que una variable funcionara dentro de la plantilla de ramita que tampoco funcionó, por ejemplo:
En la función template_preprocess_page (& $ vars) en el archivo .theme:
$test = 'Hello World';
$vars['$my_var'] = $test;
Intenté llamar a my_var dentro de la plantilla de ramita pero no funcionó y recibí un mensaje de error que decía "El sitio tiene un error, comuníquese con el administrador"
Entonces, para resumir, aquí están mis preguntas:
- ¿Cómo hago disponibles las variables dentro de las plantillas de ramita?
- ¿Cómo llamo a funciones dentro de plantillas de ramita?
- ¿Renderizo bloques dentro del archivo .theme o plantilla de ramita?
En Drupal 8, esto funciona para representar un complemento de bloque (es decir, uno que haya creado en un módulo personalizado) en un preprocess_hook:
Luego puede renderizarlo en su plantilla de ramita de esta manera:
Nota: esto cargará una versión genérica de su bloque. Si desea cargar una instancia de su bloque con variables (después de haberlo creado en / admin / structure / block), debe cargarlo de esta manera:
fuente
Puede usar el módulo Twig tweak para eso, luego puede usar la siguiente sintaxis:
Relacionado: ¿Cómo coloco un bloque mediante programación?
fuente