Julio 22, 2013
enzo
En algunas ocasiones necesitamos crear bloques de contenido basados en datos específicos de nuestra aplicación, a continuación mostrare como generar bloques en base a los términos de una taxonomía.
- Generar listado de bloques.
Para informar a Drupal que los bloques existen debemos hacer uso de hook_block_info() como se muestra en el siguiente listado de código.
/**
* Implements hook_block_info().
*/
function MIMODULO_block_info() {
//Block for each taxonomy type for candidates
$referece_types = taxonomy_get_tree(1); // ID del vocabulario
foreach ($referece_types as $key => $term) {
$blocks['reference_type_' . $term->tid] = array(
'info' => t('Reference Type') . ': ' . $term->name,
'cache' => DRUPAL_NO_CACHE
);
}
return $blocks;
}
En el código anterior generamos un bloque por cada termino del vocabulario con id igual a 1, utilizando la función taxonomy_get_tree obtenemos todos los términos del vocabulario.
Dentro del foreach definimos los bloques indicando el delta de cada bloque, definiendo el titulo que saldrá en el área administrativa y el tipo de cache del bloque.
- Implementar el contenido de los bloques.
Para definir el contenido de cada bloque debemos hacer la implementación del hook_block_view(), este hook recibe el delta único de cada bloque y de esta forma permitir que cada módulo se encargue de retornar el contenido de sus bloques.
A continuación veamos la implementación.
/**
* Implements hook_block_view().
*/
function MIMODULO_block_view($delta = '') {
$block = array();
if(strstr($delta,'reference_type_')) {
$tid = substr($delta, 15);
$term = taxonomy_term_load($tid);
$block['subject'] = $term->name;
$block['content'] = 'Content of term:' . $term->tid;
}
}
return $block;
}
En la implementación del hook_block_view definimos que todos los deltas de nuestro modulo tendrían el prefijo reference_type_ y esta es la condición para identificar los módulos que debemos procesar.
Para finalizar cuando ya se ha identificado el bloque y podemos definir el subject y content acorde a nuestras necesidades.
Espero que haya sido de ayuda.