¿Se pueden imprimir regiones dentro de una plantilla de nodo, o están las regiones estrictamente limitadas a las plantillas de página?
Puede imprimir regiones dentro de cualquier plantilla, pero no están disponibles de fábrica en la node.tpl.php
plantilla. Para que estén disponibles, creará una nueva variable para usar en su node.tpl.php
plantilla que contendrá todo el contenido de la región.
La creación de nuevas variables de plantilla se realiza mediante una función de preproceso. En el template.php
archivo de su tema , cree una función que se vea así:
function mytheme_preprocess_node(&$variables) {
}
Reemplazar mytheme
con el nombre corto de su tema. Ahora, para que Drupal reconozca esta nueva función de preproceso, debe reconstruir el registro de temas de su sitio. Esto es tan sencillo como ir a Configuración → Desarrollo → Rendimiento y presionar el botón "Borrar todas las cachés" en la parte superior.
Ahora, la forma en que funcionan las funciones de preproceso es que $variables
contiene una matriz que corresponde a las variables disponibles de su plantilla. Por ejemplo, en node.tpl.php
, $submitted
contiene el autor byline. En la función de preproceso anterior, se encuentra en $variables['submitted']
.
Para imitar lo que tiene page.tpl.php
, donde tiene una matriz llamada $page
que contiene todas las regiones, desea completar $variables['page']
.
El problema es que $page
en la node.tpl.php
que ya se rellena con un valor de verdadero / falso que le permite saber si usted está buscando en el nodo por sí mismo o en una lista.
Entonces, para evitar esa colisión de nombres, complete en su $region
lugar:
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 node.tpl.php
plantilla de su tema , puede representar cualquier región haciendo lo siguiente:
<?php print render($region['sidebar_first']); ?>
¿Dónde sidebar_first
está el nombre de la región que desea renderizar?
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>
. Desde aquí: webomelette.com/add-region-node-templateblock_get_blocks_by_region()
solo devuelve una matriz de bloques y si desea representarlo como una región, debe agregar un contenedor de región.