Crear varios bloques desde un mismo módulo

En algunos casos, deseamos generar o definir  varios bloques desde un mismo módulo.  
 
Para ello en nuestro hook_block(), vamos a utilizar la variable $delta que nos permite diferenciar los bloques que definimos en el mismo módulo. 
 
La documentación de hook_block() es un poco confusa al hablar de varios bloques y de la variable $delta que los controla. Dice: “$delta: Which block to return (not applicable if $op is 'list'). Although it is most commonly an integer starting at 0, this is not mandatory. For instance, aggregator.module uses string values for $delta
 
Según mi experiencia, $delta nos sirve para identificar cada bloque y por ende es mucho más sencillo dar a cada bloque un nombre o identificador  (el famoso $delta) en forma literal (un string) en vez de una forma numeral (un integer).Vea en este caso un ejemplo con strings de la misma API de Drupal.

 
A continuación, les muestro una parte del código a insertar en su módulo para crear dos bloques distintos.
 

<?php
/**
* Implementation of hook_block().
*
* Este hook define cuantos bloques son definidos por el módulo,
* y genera el contenido de los mismos.
*/

function mimodulo_block($op = 'list', $delta = '', $edit = array()) {
 
// El parámetro $op determina que tipo de información
  // es requerida.
 
switch ($op) {
    case
'list':
     
// Si $op es igual a "list", retornamos un array
      // de description para cada bloque. Esta información
      // sera útil para el administrador.
     
$blocks['bloque1'] = array(
       
'info'       => t('Bloque 1'), // el nombre del bloque
     
);
   
     
$blocks['bloque2'] = array(
       
'info'       => t('Bloque 2'),
       
      );
      return
$blocks;
   
    case
'view':
   
// Si $op es igual a “view”, generamos el contenido
    // para el despliegue del bloque.
    // El parámetro $delta nos indica que bloque queremos desplegar.
    // Este parámetro ha sido definido en la sección “list” 
     
     
switch ($delta) {
       
        case
'bloque1':
         
// The subject is displayed at the top of the block. Note that it
          // should be passed through t() for translation.
         
$block['subject'] = t('Bloque 1');
         
$block['content'] = t('Contenido del Bloque 1');
          break;
       
        case
'bloque2':
         
$block['subject'] = t('Bloque 2');
         
$block['content'] = t('Contenido del Bloque 2');
          break;
      }
    
      return
$block;
  }
}
?>

 
En este caso, tendremos dos bloques con los $delta bloque1 y bloque2. Para habilitarlos, basta ir en admin/build/block/list.
 
Para seguir adelante con la generación de varios bloques desde un mismo módulo, les recomiendo este excelente post de Advomatic.

Comentarios

good!

muchas gracias!... entendí perfecto! :)

Excelente

Que bueno! :)

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><img>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

By submitting this form, you accept the Mollom privacy policy.

Arcerca del autor

Karim Boudjema Karim Boudjema. Un programador belga en los Andes de Bolivia.

Ver mi perfil en LinkedInVer mi perfil en Twitter

>> Más...

Comentarios recientes