Quitando malos vicios: PHP en la base de datos de Drupal (II)

En mi primer artículo en ASPGems comenté por qué es importante no introducir PHP directamente en los campos de contenido de Drupal. Hoy seguimos con la esta serie de artículos de buenas prácticas.

Otra lugar muy común para colocar código PHP son los bloques. Se prestan mucho a ello y te solucionan la papeleta de manera sencilla y rápida; pero como comenté en el anterior artículo, php filter es caca. ¿Qué hago entonces? Es muy muy sencillo evitar eso, solo tenemos que coger el bloque y, en lugar de pegar el código php en el cuadro de texto qe te proporciona la UI, crearlo en un módulo personalizado utilizando los hooks apropiados.

Paso 1: Crear un módulo personalizado en Drupal.

Crear el esqueleto de un módulo de drupal es tremendamente fácil. En primer lugar creamos un directorio con el nombre de nuestro módulo, y la situamos dentro de nuestro directorio de módulos. La recomendación es que esté dentro de un un directorio expresamente creado para todos los módulos personalizados. En nuestro caso estará en:

sites/all/modules/custom/mimodule

Dentro del mismo creamos dos ficheros, uno que servirá para definir el módulo y otro para escribir los hooks que necesitemos. El fichero de definición debe llamarse igual que el nombre de la carpeta, seguido de la extensión .info. Podéis ver documentación de este ficheor aquí, nosotros usaremos la siguiente:

 name = customblocks
description = Example custom block
core = 7.x
package = custom

Además de eso, crearemos un fichero con el mismo nombre que nuestro directorio del módulo, seguido de la extensión .module. En el escribiremos nuestros hooks.

Paso 2: Definir el bloque

Ya en nuestro fichero mimodule.module, comenzamos a escribir los hooks necesarios para que el crear el bloque. El primer paso es definirlo dentro del listado de bloques de Drupal, y darle un nombre. Esto lo hacemos utilizando el hook hook_block_info(). Recuerda que cuando usamos un hook, tenemos que cambiarl a palabra hook, por el nombre en el módulo en el que estamos. Nuestro fichero quedaría así:

 /**
 * Implements hook_block_info().
 */
function mimodule_block_block_info() {
  $blocks = array();
  $blocks['my_block'] = array(
    'info' => t('My Custom Block'),
  );
 
  return $blocks;
}

Donde my_block será el identificador interno del bloque, y My custom Block, el identificador a mostrar (el nombre, vaya). El identificador interno no puede contener espacios ni caracteres raros. Aconsejo usar solo letras, números y guiones bajos.

Paso 3: Definir título y cuerpo

Ya casi hemos terminado. Sólo nos queda añadir el contenido a nuestro bloque. Para ello usamos el hook hook_block_view(), con el que le pondremos título (visible o no) a nuestro bloque y cuerpo.

 /**
* Implements hook_block_view().
*/
function mimodule_block_view($delta = '') {
  $block = array();
  switch ($delta) {
    case 'my_block':
      $block['subject'] = t('My custom block');
      $block['content'] = _mimodule_my_block_content();
      break;
  }
  return $block;
}
function _mimodule_my_block_content() {
  $output = t('Now I not have php in my database.');
  return $output;
}

Como ves, en el contenido hemos añadido el resultado de una función. Podríamos haber introducido directamente ahí la cadena, pero me gusta tener ordenado mi código, ¿y a ti?

Paso 4: Activar el módulo personalizado.

¡Qué no se te olvide! O no verás el bloque en la lista de bloques de Drupal. Ríete, pero me ha pasado más de una vez.

Como siempre, acepto comentarios, dudas, sugerencias, críticas y golpes varios, siempre que vengan desde el cariño o las haga @alvar0hurtad0.

🙂