Curso de Desarrollo de Módulos con Drupal 7 (VI): Creación de Bloques
Una vez gestionados los datos principales del módulo, a veces, es necesario poder presentar información en forma de bloques, tal como mencionamos en la 7ª entrega del curso de Drupal 7. A continuación, detallaremos los pasos fundamentales para la generación de bloques desde un módulo.
Declaración de un Bloque: hook_block_info()
Este el el hook principal para la definición de bloques. Veamos un ejemplo de definición en un fichero .module:
t('Current posts'), //El nombre que aparecerá en el listado de bloques 'cache' => DRUPAL\_CACHE\_PER\_ROLE, //Default ); return $blocks; } A partir de est momento debería salir el bloque en el listado de bloques. ### Obtención de información Es el momento de recoger los datos que queremos presentar en el bloque, para ello utilizamos una función creada por nosotros: /\*\* \* Función de obtención de Contenido \* \* Intenta recoger los elementos que están en la base de datos entre una fecha y otra. \* \* @return \* Un result set de los post entre dos fechas. \*/ function current\_posts\_contents(){ //Coge la fecha de hoy $today = getdate(); //Calcula la fecha hace una semana $start\_time = mktime(0, 0, 0,$today\['mon'\],($today\['mday'\] - 7), $today\['year'\]); //Coge la hora actual como la fecha final $end\_time = time(); //Usa el API de Database para hacer la consulta $query = db\_select('node', 'n') ->fields('n', array('nid', 'title', 'created')) ->condition('status', 1) //Published. ->condition('created', array($start\_time, $end\_time), 'BETWEEN') ->orderBy('created', 'DESC') //Most recent first. ->execute(); //devuelve los resultados de la consulta return $query; } ### Generando la salida del bloque: hook\_block\_view() Para generar la salida será necesario implementar el hook\_block\_view() en el fichero .module. Veamos un ejemplo de utilización: /\*\* \* Implementa hook\_block\_view(). \* \* Prepara los contenidos del bloque \*/ function current\_posts\_block\_view($delta = '') { //verifica que bloque es el que quiere presentar switch($delta){ //en caso de que sea nuestro bloque case 'current\_posts': //genera un array para definir el bloque $block\['subject'\] = t('Current posts'); //verifica los permisos del usuario, en este caso para acceder al contenido if(user\_access('access content')){ //Usamos nuestra función para recoger los datos $result = current\_posts\_contents(); //Genera un array para introducir los datos de la consulta de manera estructurada $items = array(); //Bucle que recorre los resultados y obtiene cada nodo para introducir los datos en el array foreach ($result as $node){ $items\[\] = array( 'data' => l($node->title, 'node/' . $node->nid), ); } //Verifica que el array no esta vacio if (empty($items)) { //No content in the last week. $block\['content'\] = t('No posts available.'); } else { //Pasa los datos a la funcion theme para maquetarlos $block\['content'\] = theme('item\_list', array( 'items' => $items)); } } } //Devuelve el bloque a dibujar return $block; } ### Probando Una vez genradas estas funciones será necesario activar el módulo, verificar que el bloque está presente en el listado, asignarle una región y recargar la página para ver los resultados. [](http://creativecommons.org/licenses/by-nc-sa/3.0/es/) Este obra está bajo una [licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España](http://creativecommons.org/licenses/by-nc-sa/3.0/es/).