Está en la página 1de 17

Captulo 6: Desarrollando mdulos

En este captulo desarrollaremos mdulos para Drupal 7 y comenzaremos de forma didctica a especificar qu partes son las ms fundamentales a la hora de construir mdulos.

Ejemplo 6.2: Crear un mdulo de tipo bloque. Como ya hemos visto con anterioridad, los bloques( Blocks) son contenedores independientes de informacin, que pueden ser situados en diferentes partes del sitio Web, es decir se pueden colocar en cualquiera de las regiones( Regions) definidas en el tema(Theme). Requerimiento: Elaborar un mdulo de tipo bloque con Drupal 7, que nos muestre la fecha y hora actual. A continuacin mostraremos 2 ejemplos grficos que para este requerimiento podran ser:
Hoy es: Son las: Viernes, 04 de Noviembre del 2011 0

Tabla 6.2.1: Ejemplo del contenido del bloque para el mdulo Hoy da.

04 de Noviembre del 2011 07:14 a.m. Lu Ma Mi Ju Vi S Do


Tabla 6.2.2: Ejemplo del contenido del bloque para el mdulo Hoy da.

Sea cualquiera de los 2 ejemplos que seleccionemos, slo estaramos refirindonos a la forma en la que queremos que el

30

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

contenido se muestre, sin embargo vamos a estudiar todo lo necesario para la implementar este mdulo. Primero, debemos ponerle un nombre a nuestro mdulo, para este ejemplo le llamaremos hoydia, por lo tanto ya debemos pensar que debemos crear dos archivos como mnimo, para trabajar en la implementacin de este mdulo. hoydia.info hoydia.module

Estos archivos debern estar preferentemente situados dentro de una carpeta tambin llamada hoydia. Tambin hemos resuelto ya, con anterioridad que la direccin adecuada donde publicaremos nuestros mdulos de desarrollo ser en la direccin sites/all/modules. Por lo tanto ya deberamos tener esto:

Figura 6.2.1: Archivos necesarios para un mdulo (mdulo Hoy da).

Seguidamente viene la edicin del archivo hoydia.info, la cual brindar la informacin del mdulo a Drupal y lo reconozca para mostrarlo en la lista de mdulos disponibles para su activacin. Por eso vamos a editar este archivo con el siguiente

Captulo 6: Desarrollando mdulos - 31

contenido bsico.

Figura 6.2.2: Archivo de informacin de un mdulo (hoydia.info).

Es importante recordar que al utilizar el editor de texto plano, donde modificamos nuestros archivos de desarrollo con Drupal (*.info, *.module, *.php, *.js, *.css, *.inc, etc.), todos stos deben estar utilizando el formato de codificacin adecuado, y esto hay que hacerlo antes de comenzar a ingresar cdigo fuente; ya que si lo hacemos demasiado tarde, posiblemente vamos a tener que encontrarnos con la difcil tarea de cambiar los caracteres fallidos que se encontrarn luego de cambiarle tipo de codificacin. Por ejemplo, en el editor de texto plano Notepad++ para utilizar convenientemente las tildes, sin errores de codificacin y sin marcas de orden de bytes(BOM) que pueden muchas veces ocasionar errores de interpretacin, utilizaremos el tipo de codificacin UTF-8 sin BOM y para poder hacerlo debemos ingresar al men Formato y submenu Codificar en UTF-8 sin BOM. A continuacin se muestra la imagen donde se realiza el cambio de tipo de codificacin a un documento en Notepad++.

32

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

Figura 6.2.3: Cambiando el formato de codificacin en Notepad++.

Bien, si hasta el momento hemos seguido con todas estas recomendaciones, deberamos tener en la lista de mdulos de Drupal, el modulo Hoy da listo para ser activado; pero como no hemos programado nada an, no habrn funcionalidades todava. As que debemos tener hasta el momento en la lista de mdulos lo siguiente:

Figura 6.2.4: Lista de mdulos (informacin del mdulo Hoy da).

Ahora comenzaremos a ingresar cdigo fuente al archivo hoydia.module, el cual tendr cdigo PHP de la funcionalidad del mdulo.

Captulo 6: Desarrollando mdulos - 33

Para comenzar es necesario recordar el concepto de los hooks (ganchos), los cuales indican a otros mdulos de Drupal si nuestro mdulo personalizado tiene algo que aadir para alterar el funcionamiento de una accin determinada. No debemos olvidar de la nomenclatura que se utiliza para hacer uso de un gancho determinado; es el nombre del mdulo seguido del subguin y despus el nombre del gancho; a si qu hoydia_menu significar el llamado al gancho men por parte del mdulo hoydia(Hoy da). Para resolver el requerimiento al ejemplo 6.2, utilizaremos algunos ganchos que nos irn indicando paso a paso cierta funcionalidad. Comenzaremos a editar el archivo hoydia.module, iniciando con la etiqueta de apertura de cdigo PHP <?php, advirtiendo que no debe de utilizarse el cierre de cdigo PHP en ningn momento (Eje: la etiqueta ?>); tambin seria muy conveniente, empezar a utilizar los comentarios los cuales nos van a ser necesarios a la hora de reutilizar nuestro cdigo o tambin para tener facilidad a la hora de darle mantenimiento. As que este seria la primera edicin de nuestro archivo de mdulo con las sugerencias hechas hasta el momento:

34

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

Figura 6.2.5: Uso del gancho help (hoydia.module).

Hasta el momento hemos comenzado a utilizar el primer gancho; help nos especfica la informacin del mdulo en referencia para la ayuda. Por lo tanto la funcin hoydia_help( ) evalu el valor de la variable de entrada $path y debe retornar contenido HTML para una ruta especfica. Si activamos el mdulo Hoy da en la lista de mdulos y hacemos clic en el botn Guardar configuracin, debemos obtener el enlace Ayuda para el mdulo Hoy da en lista:

Captulo 6: Desarrollando mdulos - 35

Figura 6.2.6: Lista de mdulos (mdulo Hoy da activado).

La implementacin del gancho help, representa que ya funciona el acceso en la siguientes direcciones:

admin/help/hoydia #overlay=admin/help/hoydia

Donde podemos observar que se muestra la siguiente salida:

Figura 6.2.7: Salida del gancho help (hoydia.module).

Ahora vamos a utilizar otro gancho, el adecuado para que nos aparezca en la lista de bloques, el bloque que estamos empezando a construir. Para ello agregamos el siguiente cdigo al archivo hoydia.module:

36

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

Figura 6.2.8: Uso del gancho block_info (hoydia.module).

La figura 6.2.8 representa la llamada al gancho block_info que solicita informacin que debe mostrarse en la lista de bloques desactivados inicialmente. Debemos reconocer que este gancho slo debe utilizarse, cuando queremos que nuestros mdulos implementen contenidos para el tipo bloque, por lo que no debemos pensar que siempre sera necesaria su implementacin. La funcin hoydia_block_info( ) debe retornar el array asociativo $blocks que contendr tal informacin. Despus podemos ver el resultado ingresando al men Estructura y Bloques y encontrar el bloque Hoy da en la lista de bloques desactivados:

Figura 6.2.9: Lista de bloques (bloque Hoy da).

Finalmente para aprender como especificar el contenido que

Captulo 6: Desarrollando mdulos - 37

queremos que nuestro mdulo muestre en un bloque, debemos implementar el gancho block_view donde la funcin correspondiente deber retornar como en varios casos anteriores un array asociativo; este array se llama $block y posee el valor del titulo del bloque que se especifica en subject y tambin su contenido declarado en XHTML en content. Un ejemplo para la implementacin de siguiente cdigo: nuestro gancho block_view seria el

Figura 6.2.10: Uso del gancho block_view (hoydia.module).

Ahora para ver el resultado obtenido, slo tenemos que asegurarnos que el mdulo este activado y en la lista de bloques seleccionar en cual de las regiones queremos que se muestre el bloque y hacer clic en el botn Guardar bloques. Por ejemplo si queremos que se muestre en el encabezado seria as:

38

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

Figura 6.2.11: Uso del gancho block_view (hoydia.module).

Para despus obtener el siguiente resultado:

Figura 6.2.12: Contenido de un bloque en el encabezado (mdulo Hoy da).

Ya podemos entender cuales son los ganchos necesarios como mnimo para implementar un mdulo de tipo bloque. Hasta el momento el contenido que se especifica en el gancho block_view es esttico, para que este contenido sea dinmico tenemos que obtener la fecha y hora actual; podemos usar las funciones PHP getdate() o date(), de las cuales detallaremos su utilizacin:
getdate es una funcin PHP que podemos utilizar para obtener informacin de la fecha y hora. Devuelve un array asociativo que contiene informacin de la fecha de timestamp, o el momento local actual si no se especifica timestamp. Los elementos devueltos de la matriz asociativa

Captulo 6: Desarrollando mdulos - 39

son los siguientes:


Ejemplo de valores devueltos 0 a 59 0 a 59 0 a 23 1 a 31 0 (para Domingo) hasta 6 (para Sbado) 1 hasta 12 Ejemplos: 1999 o 2003 0 hasta 365 Sunday hasta Saturday January hasta December Dependiente del Sistema, tpicamente -2147483648 hasta 2147483647.

Clave "seconds" "minutes" "hours" "mday" "wday" "mon" "year" "yday" "weekday" "month"

Descripcin Representacion numrica de los segundos Representacion numrica de los minutos Representacion numrica de las horas Representacion numrica del da del mes Representacion numrica del da de la semana Representacion numrica de un mes Una representacion numrica completa de una ao, 4 dgitos Representacion numrica del da del ao Una representacin textual completa del da de la semana Una representacin textual completa de un mes, como January o March Los segundos desde la poca Unix, similar a los valores devueltos por time() y usados por date().

Tabla 6.2.3: Claves de la matriz asociativa devuelta por la funcin getdate().

Si quisiramos imprimir desde cdigo PHP, contenido XHTML para obtener las tablas 6.2.1 o 6.2.2, necesitaramos implementar el siguiente cdigo PHP que debe probarse y ejecutarse independientemente de Drupal:

40

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

Figura 6.2.13: Cdigo PHP para obtener fecha y hora en una tabla.

En la Figura 6.2.13 la variable $bloque es una cadena que contendr etiquetas HTML, para este caso utilizaremos la etiqueta table; la funcin date_default_timezone_set se usa para establecer una zona horaria predeterminada, adecuada para nuestra regin, ya que despus se va utilizar una funcin que obtendr la fecha y hora de acuerdo a este valor. Siempre que utilicemos funciones para obtener fecha o hora en un script, es muy recomendable saber en que zona horaria se esta trabajando; podemos cambiar la zona horaria desde cdigo PHP

Captulo 6: Desarrollando mdulos - 41

y antes de usar las funciones de fecha y/o hora, como es este caso, o tambin lo podriamos hacer modificando el archivo de configuracin php.ini, al valor1 de la propiedad date.timezone situada en la seccin Date, para esto necesitamos tener acceso de edicin a la configuracin de PHP del servidor. La variable $hoy, contendr todas las claves de la matriz asociativa devuelta por la funcin getdate(). En la lnea 6 es donde se empieza a ensamblar cdigo HTML, empezando con la etiqueta table(border='1' se utiliza para visualizar la tabla, pero ms adelante resolveremos que como buena practica, no deben de utilizarse tablas y tampoco formatear dentro del cdigo HTML.), que mostraremos como salida al final; la funcin t la utilizamos para simular la funcin t del Drupal. En la lnea 11 se convierte la hora a la nomenclatura 12 horas y se utiliza tambin la funcin sprintf para formatear las cadenas string devueltas por $hoy['mday'], $hoy['year'], $hoy['hours'] y $hoy['minutes']. As la salida 7:3 a.m. la veremos mas adecuada como 07:03 a.m.. Tambin se esta evaluando la hora(valores entre 0-23), para seleccionar entre a.m. o p.m. y finalmente enviamos $bloque como salida para obtener la tabla HTML deseada. Ahora que ya hemos entendido todo lo anterior debemos obtener

1 Para ver el Listado de Timezones soportados por PHP vea:


http://www.php.net/manual/es/timezones.php. Por ejemplo el valor America/Lima

42

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

Figura 6.2.14: Tabla obtenida al ejecutar el cdigo PHP de la figura 6.2.13.

Ahora para obtener como salida, la tabla HTML desde el mdulo Hoy da, debemos copiar y pegar parte del cdigo de la figura 6.2.13 que corresponde a la obtencin de la fecha y ensamblaje de la tabla HTML en la variable $bloque. Entonces slo debemos modificar el gancho block_view, y es dentro de esa funcin donde debemos copiar el cdigo que debe finalmente asignar la variable $bloque al content del array asociativo $block(Vea lnea 59 de la figura 6.2.15), para que sea retornada como HTML vlido.

Figura 6.2.15: Ejemplo de uso del mdulo block_view (hoydia.module).

Despus de guardar los cambios hechos hasta el momento al

Captulo 6: Desarrollando mdulos - 43

archivo hoydia.module, podemos actualizar el sitio Web en Drupal para observar la salida obtenida por el mdulo Hoy da.

Figura 6.2.16: Obtencin del uso del mdulo block_view (hoydia.module).

Podemos modificar el archivo hoydia.module para generar mas de 1 bloque al mismo tiempo los cuales podemos visualizar cualquier regin.

Figura 6.2.16: Lista de 2 bloques en un mdulo (gancho block_info).

De acuerdo a la anterior afirmacin es claro que podemos visualizar diferentes bloques de diferentes salidas HTML con un mismo mdulo; para esto debemos centrar nuestro estudio en los ganchos block_info y block_view. En la funcin hoydia_block_view(), por ejemplo primero hemos inicializado la variable $block como un array vaci con la instruccin $block=array(); y despus con la estructura de control switch

44

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

seleccionamos la salida correspondiente de acuerdo al bloque definido en el gancho block_info. Despus de hacer estos cambios podramos obtener lo siguiente:

Figura 6.2.17: Salida de 2 bloques en un mdulo (gancho block_view).