Cómo generar bloques dinamicamente en Drupal 7

Julio 22, 2013

enzo
Drupal
Desarrollo de Modulos

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.

  1. 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.

  1. 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.

7Sabores® y SieteSabores® son marcas registradas por Ingeniarte Consultores S.A. Todos los derechos reservados 2022.