Drupal 7 hook_block_info() y hook_block_view() muestran información en el bloque
En la lección anterior creamos un módulo para Drupal 7. En esta lección continuaremos ampliando las capacidades de nuestro módulo. Añadiremos la salida de un bloque mediante los hooks hook_block_info()
y hook_block_view()
. Este bloque mostrará información sobre los últimos usuarios registrados en el sitio con enlaces a sus páginas de perfil.
Empezamos con la descripción de hook_block_info():
Define todos los bloques proporcionados por el módulo.
Este hook le dice a Drupal qué bloques generará el módulo y puede definir sus configuraciones.
En hook_block_info()
cada bloque recibe un identificador único llamado "delta" (clave del array retornado). Este valor debe ser único dentro del módulo y se utiliza para:
- Pasarse como argumento a otros hooks para identificar el bloque.
- Crear la clase HTML
block-MODULE-DELTA
para personalización con CSS o JavaScript. - Definir funciones de tematización específicas
block__MODULE__DELTA
. - Identificar el bloque en
hook_block_info_alter()
y otros hooks.
El valor delta
puede ser string o número, con una longitud máxima de 32 bytes.
Valores de retorno
Un array asociativo donde las claves son los delta
de cada bloque, y los valores son arrays con la descripción del bloque. Un bloque puede tener las siguientes claves:
- 'info' (obligatorio): nombre legible del bloque (usado en la administración).
- 'cache' (opcional): define el comportamiento del caché:
- DRUPAL_CACHE_PER_ROLE (por defecto)
- DRUPAL_CACHE_PER_USER
- DRUPAL_CACHE_PER_PAGE
- DRUPAL_CACHE_GLOBAL
- DRUPAL_NO_CACHE
- 'properties' (opcional): array de metadatos como:
- 'administrative': booleano
- 'weight': peso inicial
- 'status': 1 = habilitado, 0 = deshabilitado
- 'region': región por defecto
- 'visibility': visibilidad del bloque
- 'pages': lista de rutas para visibilidad
Ejemplo de implementación:
<?php function sitemade_block_info() { $blocks = array(); $blocks[1]['info'] = 'Lista de usuarios'; return $blocks; } ?>
Este bloque aparecerá en la administración. Lo activamos en la barra lateral izquierda:
hook_block_view($delta = '')
Parámetro:
$delta
: identificador del bloque según lo definido en hook_block_info()
.
Valor de retorno: un array con las claves:
- subject: título del bloque
- content: contenido del bloque (string HTML o array renderizable)
Ejemplo de implementación:
<?php function sitemade_block_view($delta = '') { $block = array(); switch ($delta) { case 1: $block['subject'] = 'Usuarios'; $block['content'] = ''; $query = db_select('users', 'u') ->fields('u', array('uid', 'name')) ->orderBy('u.uid', 'DESC') ->range(0, 5) ->execute(); $users = $query->fetchAll(PDO::FETCH_ASSOC); foreach ($users as $user) { $block['content'] .= '<div><a href="' . base_path() . 'user/' . $user['uid'] . '">' . $user['name'] . '</a></div>'; } break; } return $block; } ?>
Esto mostrará una lista de los últimos 5 usuarios registrados, con enlaces a sus perfiles. Aunque sería mejor usar la función l()
de Drupal para generar los enlaces correctamente, esto se explicará en otra lección.