Inserción de un bloque en cualquier plantilla (Drupal – insertar bloque en plantilla)
Drupal 8
En un template Twig no puedes ejecutar código PHP, por lo que debes pasar el bloque ya renderizado al template. Si necesitas pasar una variable al template de nodo, usa la función themename_preprocess_node()
en tu tema; para la página usa themename_preprocess_page()
. Asigna la variable en PHP y luego la muestras en Twig.
Bloques creados desde la administración
$block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block);
En themename_preprocess_node()
(template de nodo) se haría así:
function themename_preprocess_node(&$variables) { $block = \Drupal\block\Entity\Block::load('your_block_id'); $variables['block_output'] = \Drupal::entityTypeManager() ->getViewBuilder('block') ->view($block); }
Y en node.html.twig
:
{{ block_output }}
Bloques creados vía plugins
Se muestran como los anteriores, pero con este código:
$block_manager = \Drupal::service('plugin.manager.block'); // Configuración del bloque si es necesario. $config = []; $plugin_block = $block_manager->createInstance('system_breadcrumb_block', $config); // Comprobación de acceso. $access_result = $plugin_block->access(\Drupal::currentUser()); if ($access_result->isForbidden()) { return []; } $render = $plugin_block->build(); return $render;
Drupal 7
En Drupal 7 la función es la misma, solo cambia la llamada:
print render(module_invoke('block', 'block_view', '12'));
Para un bloque de Views:
print render(module_invoke('views', 'block_view', 'feedbacks-block'));
Drupal 6
Para insertar un bloque en el lugar deseado usa module_invoke()
:
$block = module_invoke('views', 'block', 'view', 'block_name'); print $block['content'];
Para un bloque estándar:
$block = module_invoke('block', 'block', 'view', 12); print $block['content'];
Donde 12
es el delta del bloque.
Y para un bloque de Views:
$block = module_invoke('views', 'block', 'view', 'feedbacks-block_1'); print $block['content'];
Donde feedbacks-block_1
es el nombre del bloque en la vista (feedbacks
= nombre de la vista, block_1
= display).