Está en la página 1de 17

Capítulo 6: Desarrollando módulos

En este capítulo desarrollaremos módulos para Drupal 7 y comenzaremos de forma didáctica a especificar qué partes son las más fundamentales a la hora de construir módulos.

Ejemplo 6.2: Crear un módulo de tipo bloque. Como ya hemos visto con anterioridad, los bloques(Blocks) son contenedores independientes de información, 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 módulo de tipo bloque con Drupal 7, que nos muestre la fecha y hora actual. A continuación mostraremos 2 ejemplos gráficos que para este requerimiento podrían ser:

Hoy es:

Viernes, 04 de Noviembre del 2011

Son las:

0

Tabla 6.2.1: Ejemplo del contenido del bloque para el módulo Hoy día.

04 de Noviembre del 2011

07:14 a.m.

Lu

Ma

Mi

Ju

Vi

Do

Tabla 6.2.2: Ejemplo del contenido del bloque para el módulo Hoy día.

Sea cualquiera de los 2 ejemplos que seleccionemos, sólo estaríamos refiriéndonos 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 módulo.

Primero, debemos ponerle un nombre a nuestro módulo, para este ejemplo le llamaremos hoydia, por lo tanto ya debemos pensar que debemos crear dos archivos como mínimo, para trabajar en la implementación de este módulo.

hoydia.info

hoydia.module

Estos archivos deberán estar preferentemente situados dentro de una carpeta también llamada hoydia. También hemos resuelto ya, con anterioridad que la dirección adecuada donde publicaremos nuestros módulos de desarrollo será en la dirección sites/all/modules. Por lo tanto ya deberíamos tener esto:

sites/all/modules . Por lo tanto ya deberíamos tener esto: Figura 6.2.1 : Archivos necesarios para un

Figura 6.2.1: Archivos necesarios para un módulo (módulo Hoy día).

Seguidamente viene la edición del archivo hoydia.info, la cual brindará la información del módulo a Drupal y lo reconozca para mostrarlo en la lista de módulos disponibles para su activación. Por eso vamos a editar este archivo con el siguiente

contenido básico.

Capítulo 6: Desarrollando módulos -

31

contenido básico. Capítulo 6: Desarrollando módulos - 31 Figura 6.2.2 : Archivo de información de un

Figura 6.2.2: Archivo de información de un módulo (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 codificación adecuado, y esto hay que hacerlo antes de comenzar a ingresar código fuente; ya que si lo hacemos demasiado tarde, posiblemente vamos a tener que encontrarnos con la difícil tarea de cambiar los caracteres fallidos que se encontrarán luego de cambiarle tipo de codificación. Por ejemplo, en el editor de texto plano Notepad++ para utilizar convenientemente las tildes, sin errores de codificación y sin marcas de orden de bytes(BOM) que pueden muchas veces ocasionar errores de interpretación, utilizaremos el tipo de codificación UTF-8 sin BOM y para poder hacerlo debemos ingresar al menú Formato y submenu Codificar en UTF-8 sin BOM. A continuación se muestra la imagen donde se realiza el cambio de tipo de codificación a un documento en Notepad++.

32

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

32 Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7 Figura 6.2.3 : Cambiando el

Figura 6.2.3: Cambiando el formato de codificación en Notepad++.

Bien, si hasta el momento hemos seguido con todas estas recomendaciones, deberíamos tener en la lista de módulos de Drupal, el modulo Hoy día listo para ser activado; pero como no hemos programado nada aún, no habrán funcionalidades todavía. Así que debemos tener hasta el momento en la lista de módulos lo siguiente:

tener hasta el momento en la lista de módulos lo siguiente: Figura 6.2.4 : Lista de

Figura 6.2.4: Lista de módulos (información del módulo Hoy día).

Ahora comenzaremos a ingresar código fuente al archivo hoydia.module, el cual tendrá código PHP de la funcionalidad del módulo.

Capítulo 6: Desarrollando módulos -

33

Para comenzar es necesario recordar el concepto de los hooks (ganchos), los cuales indican a otros módulos de Drupal si nuestro módulo personalizado tiene algo que añadir para alterar el funcionamiento de una acción determinada. No debemos olvidar de la nomenclatura que se utiliza para hacer uso de un gancho determinado; es el nombre del módulo seguido del subguión y después el nombre del gancho; a si qué hoydia_menu significará el llamado al gancho menú por parte del módulo hoydia(Hoy día). Para resolver el requerimiento al ejemplo 6.2, utilizaremos algunos ganchos que nos irán indicando paso a paso cierta funcionalidad. Comenzaremos a editar el archivo hoydia.module, iniciando con la etiqueta de apertura de código PHP <?php, advirtiendo que no debe de utilizarse el cierre de código PHP en ningún momento (Eje: la etiqueta ?>); también seria muy conveniente, empezar a utilizar los comentarios los cuales nos van a ser necesarios a la hora de reutilizar nuestro código o también para tener facilidad a la hora de darle mantenimiento. Así que este seria la primera edición de nuestro archivo de módulo con las sugerencias hechas hasta el momento:

34

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

34 Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7 Figura 6.2.5 : Uso del

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

Hasta el momento hemos comenzado a utilizar el primer gancho; help nos específica la información del módulo en referencia para la ayuda. Por lo tanto la función hoydia_help( ) evaluá el valor de la variable de entrada $path y debe retornar contenido HTML para una ruta específica. Si activamos el módulo Hoy día en la lista de módulos y hacemos clic en el botón Guardar configuración, debemos obtener el enlace Ayuda para el módulo Hoy día en lista:

Capítulo 6: Desarrollando módulos -

35

Capítulo 6: Desarrollando módulos - 35 Figura 6.2.6 : Lista de módulos (módulo Hoy día activado).

Figura 6.2.6: Lista de módulos (módulo Hoy día activado).

La implementación 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:

podemos observar que se muestra la siguiente salida: • • Figura 6.2.7 : Salida del gancho

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 código al archivo hoydia.module:

36

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

36 Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7 Figura 6.2.8 : Uso del

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 información que debe mostrarse en la lista de bloques desactivados inicialmente. Debemos reconocer que este gancho sólo debe utilizarse, cuando queremos que nuestros módulos implementen contenidos para el tipo bloque, por lo que no debemos pensar que siempre sera necesaria su implementación. La función hoydia_block_info( ) debe retornar el array asociativo $blocks que contendrá tal información. Después podemos ver el resultado ingresando al menú Estructura y Bloques y encontrar el bloque Hoy día en la lista de bloques desactivados:

el bloque Hoy día en la lista de bloques desactivados: Figura 6.2.9 : Lista de bloques

Figura 6.2.9: Lista de bloques (bloque Hoy día).

Finalmente para aprender como especificar el contenido que

Capítulo 6: Desarrollando módulos -

37

queremos que nuestro módulo muestre en un bloque, debemos implementar el gancho block_view donde la función 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 también su contenido declarado en XHTML en content. Un ejemplo para la implementación de nuestro gancho block_view seria el siguiente código:

de nuestro gancho block_view seria el siguiente código: Figura 6.2.10 : Uso del gancho block_view (

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

Ahora para ver el resultado obtenido, sólo tenemos que asegurarnos que el módulo 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 botón Guardar bloques. Por ejemplo si queremos que se muestre en el encabezado seria así:

38

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

38 Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7 Figura 6.2.11 : Uso del

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

Para después obtener el siguiente resultado:

). Para después obtener el siguiente resultado: Figura 6.2.12 : Contenido de un bloque en el

Figura 6.2.12: Contenido de un bloque en el encabezado (módulo Hoy día).

Ya podemos entender cuales son los ganchos necesarios como mínimo para implementar un módulo de tipo bloque. Hasta el momento el contenido que se especifica en el gancho block_view es estático, para que este contenido sea dinámico tenemos que obtener la fecha y hora actual; podemos usar las funciones PHP getdate() o date(), de las cuales detallaremos su utilización:

getdate es una función PHP que podemos utilizar para obtener información de la fecha y hora. Devuelve un array asociativo que contiene información de la fecha de timestamp, o el momento local actual si no se especifica timestamp. Los elementos devueltos de la matriz asociativa

son los siguientes:

Capítulo 6: Desarrollando módulos -

39

Clave

Descripción

Ejemplo de valores devueltos

"seconds"

Representacion numérica de los segundos

 

0

a 59

"minutes"

Representacion numérica de los minutos

 

0

a 59

"hours"

Representacion numérica de las horas

 

0

a 23

"mday"

Representacion numérica del día del mes

 

1

a 31

"wday"

Representacion numérica del día de la semana

0

(para Domingo) hasta

6

(para Sábado)

"mon"

Representacion numérica de un mes

1

hasta 12

"year"

Una representacion numérica completa de una año, 4 dígitos

Ejemplos: 1999 o 2003

"yday"

Representacion numérica del día del año

 

0 hasta 365

"weekday"

Una representación textual completa del día de la semana

Sunday hasta

Saturday

 

"month"

Una representación textual completa de un mes, como January o March

January hasta

December

 
   

Dependiente del

0

Los segundos desde la Época Unix,

similar a los valores devueltos por time() y usados por date().

Sistema, típicamente -2147483648 hasta

2147483647.

Tabla 6.2.3: Claves de la matriz asociativa devuelta por la función getdate().

Si quisiéramos imprimir desde código PHP, contenido XHTML para obtener las tablas 6.2.1 o 6.2.2, necesitaríamos implementar el siguiente código PHP que debe probarse y ejecutarse independientemente de Drupal:

40

Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7

40 Richart S. Escobedo Quispe - Desarrollo Web con Drupal 7 Figura 6.2.13: Código PHP para

Figura 6.2.13: Código 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 función date_default_timezone_set se usa para establecer una zona horaria predeterminada, adecuada para nuestra región, ya que después se va utilizar una función 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 código PHP

Capítulo 6: Desarrollando módulos -

41

y antes de usar las funciones de fecha y/o hora, como es este caso, o también lo podriamos hacer modificando el archivo de configuración php.ini, al valor 1 de la propiedad date.timezone situada en la sección Date, para esto necesitamos tener acceso de edición a la configuración de PHP del servidor. La variable $hoy, contendrá todas las claves de la matriz asociativa devuelta por la función getdate(). En la línea 6 es donde se empieza a ensamblar código HTML, empezando con la etiqueta table(border='1' se utiliza para visualizar la tabla, pero más adelante resolveremos que como buena practica, no deben de utilizarse tablas y tampoco formatear dentro del código HTML.), que mostraremos como salida al final; la función t la utilizamos para simular la función t del Drupal. En la línea 11 se convierte la hora a la nomenclatura 12 horas y se utiliza también la función 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 También 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

que ya hemos entendido todo lo anterior debemos obtener 1 Para ver el Listado de Timezones

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 código PHP de la figura 6.2.13.

Ahora para obtener como salida, la tabla HTML desde el módulo Hoy día, debemos copiar y pegar parte del código de la figura 6.2.13 que corresponde a la obtención de la fecha y ensamblaje de la tabla HTML en la variable $bloque. Entonces sólo debemos modificar el gancho block_view, y es dentro de esa función donde debemos copiar el código que debe finalmente asignar la variable $bloque al content del array asociativo $block(Vea línea 59 de la figura 6.2.15), para que sea retornada como HTML válido.

figura 6.2.15), para que sea retornada como HTML válido. Figura 6.2.15 : Ejemplo de uso del

Figura 6.2.15: Ejemplo de uso del módulo block_view (hoydia.module).

Después de guardar los cambios hechos hasta el momento al

Capítulo 6: Desarrollando módulos -

43

archivo hoydia.module, podemos actualizar el sitio Web en Drupal para observar la salida obtenida por el módulo Hoy día.

para observar la salida obtenida por el módulo Hoy día . Figura 6.2.16 : Obtención del

Figura 6.2.16: Obtención del uso del módulo block_view (hoydia.module).

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

tiempo los cuales podemos visualizar cualquier región. Figura 6.2.16 : Lista de 2 bloques en un

Figura 6.2.16: Lista de 2 bloques en un módulo (gancho block_info).

De acuerdo a la anterior afirmación es claro que podemos visualizar diferentes bloques de diferentes salidas HTML con un mismo módulo; para esto debemos centrar nuestro estudio en los ganchos block_info y block_view. En la función hoydia_block_view(), por ejemplo primero hemos inicializado la variable $block como un array vació con la instrucción $block=array(); y después 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. Después de hacer estos cambios podríamos obtener lo siguiente:

de hacer estos cambios podríamos obtener lo siguiente: Figura 6.2.17 : Salida de 2 bloques en

Figura 6.2.17: Salida de 2 bloques en un módulo (gancho block_view).