suggestions - template drupal 7
¿Cómo insertar un bloque en un nodo o plantilla en Drupal 7? (15)
Acabo de probar esto en drupal 7 y funciona:
$bloqueServicios = module_invoke(''views'', ''block_view'', ''servicios-blo_home'');
print render($bloqueServicios);
¡Buena suerte!
En Drupal 6, fue fácil insertar un bloque en una plantilla con el siguiente código:
$block = module_invoke(''views'', ''block'', ''view'', ''block_name'');
print $block[''content''];
Sin embargo, el uso de las mismas instrucciones en Drupal 7 no parece funcionar. He mirado alrededor y no puedo encontrar el nuevo método.
¿Drupal 7 tiene una rutina que puede permitir insertar un bloque mediante programación en una plantilla o nodo?
Con la respuesta de wrburgess, puede recibir un error si su servidor está usando una versión más nueva de PHP.
Strict warning: Only variables should be passed by reference in include()...
Esto es lo que hice para no causar / deshacerme del error.
<?php
$blockObject = block_load(''views'', ''block_name'');
$block = _block_get_renderable_array(_block_render_blocks(array($blockObject)));
$output = drupal_render($block);
print $output;
?>
En mi búsqueda para incluir un bloque en una plantilla, me encontré con esta publicación.
Como una adición, si desea incluir un bloque personalizado (que agregó a través de la interfaz de bloque), debe usar (en lugar de block_load();
en drupal 7)
$block = block_get_custom_block($bid);
$content = $block[''body''];
Esta parece ser la solución para insertar bloques en plantillas para Drupal 7, pero parece un poco torpe y no tengo idea sobre el impacto en el rendimiento:
$block = block_load(''views'', ''block_name'');
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
Si alguien tiene un mejor procedimiento, por favor agregue.
Este trabajo para mí:
98 es la identificación del bloque
$block =block_load(''block'',98);
$output = drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
print $output;
Esto funcionó para mi Drupal 7, URL: admin / structure / block / manage / addthis / addthis_block / configure NOTA: delta y nombre del módulo presentes en la url misma
$addblock = module_invoke(''addthis'',''block_view'',''addthis_block'');
print render($addblock[''content'']);
Se puede encontrar más información en http://technarco.com/drupal/insert-block-node-or-template-drupal-7
Hay un módulo llamado insert_block para aquellos que quieren insertar el bloque "Drupal way" (no para programar nada, simplemente habilite el módulo). Here cómo configurarlo.
NOTA: Sé que esta pregunta se trata de "insertar un bloque mediante programación en una plantilla o nodo", pero Google envía personas aquí incluso si están buscando una solución no programadora como yo.
La función module_invoke()
funciona. Sin embargo, descubrí que la representación de un bloque de esta manera aparentemente no usará una plantilla personalizada para ese bloque. Esto podría estar bien dependiendo de sus necesidades.
Como se comentó anteriormente en otras respuestas, esto también funciona y también hace uso de plantillas personalizadas:
$raw_block = block_load(''your-module'', ''delta'');
$rendered_block = drupal_render(_block_get_renderable_array(_block_render_blocks(array($raw_block))));
print $rendered_block;
Por lo tanto, si tiene un block--your-module--delta.tpl.php
personalizado block--your-module--delta.tpl.php
archivo de plantilla block--your-module--delta.tpl.php
, se usará para formatear el bloque.
Fuente: http://api.drupal.org/api/drupal/includes!module.inc/function/module_invoke/7
Mejorando la respuesta de Wrburgess, puedes hacerlo en una línea ...
<?php print drupal_render(_block_get_renderable_array(_block_render_blocks(array(block_load(''module_name'', ''block_delta''))))); ?>
Entonces, por ejemplo, uso el bloque número 6 ...
<?php print drupal_render(_block_get_renderable_array(_block_render_blocks(array(block_load(''block'', ''6''))))); ?>
Mira cómo Drupal lo hace en _block_render_blocks . El resultado de esa función pasa a drupal_render .
Por alguna razón, render()
no funciona para mí, pero esto funciona:
<?php
$block = module_invoke(''block'', ''block_view'', ''1'');
echo $block[''content''];
?>
Recientemente me enfrenté al mismo problema y encontré una buena solución que describe la solución en drupal como la de Drupal.
Puede imprimir regiones dentro de cualquier plantilla, pero no están disponibles de fábrica en la plantilla node.tpl.php. Para que estén disponibles, creará una nueva variable para usar en su plantilla node.tpl.php que contendrá todo el contenido de la región.
La creación de nuevas variables de plantilla se realiza mediante el uso de una función de preproceso. En el archivo template.php de tu tema, crea una función que se vea así:
function mytheme_preprocess_node(&$variables) {
// Get a list of all the regions for this theme
foreach (system_region_list($GLOBALS[''theme'']) as $region_key => $region_name) {
// Get the content for each region and add it to the $region variable
if ($blocks = block_get_blocks_by_region($region_key)) {
$variables[''region''][$region_key] = $blocks;
}
else {
$variables[''region''][$region_key] = array();
}
}
}
Luego, en la plantilla node.tpl.php de su tema, puede representar cualquier región haciendo lo siguiente:
<?php print render($region[''sidebar_first'']); ?>
Donde sidebar_first es el nombre de la región que desea representar.
Lea el artículo completo aquí: https://drupal.stackexchange.com/questions/20054/can-regions-be-printed-within-a-node-template
D7:
<?php
$block = module_invoke(''module_name'', ''block_view'', ''block_delta'');
print render($block[''content'']);
?>
''module_name'' = El nombre de la máquina del módulo (es decir, el nombre de la carpeta del módulo). Esto también se aplica a los módulos principales, por lo que, por ejemplo, "búsqueda", "usuario" y "comentario" funcionarían aquí.
''block_delta'' = El nombre de la máquina del bloque. Puede determinar qué es esto visitando la página de administración de bloque y editando el bloque. La URL para editar un bloque de formulario web, por ejemplo, sería algo así como:
Drupal 7: admin / structure / block / manage / webform / client-block-11 / configure
En este ejemplo, ''webform'' es el nombre del módulo, ''client-block-11'' es el delta del bloque.
Los bloques personalizados tendrán el nombre de módulo de ''bloque'' y un número para un delta, que también puede encontrar editando el bloque.
Más información: http://drupal.org/node/26502
module_invoke Funciona bien para render block en el archivo de plantilla, pero no funciona en sitios multilingües.
$block = module_invoke(''menu_block'', ''block_view'', ''6'');
echo render ($block[''content'']);
Esto funciona para mí para imprimir el bloque de menú.