Crear un bloque de navegación entre enlaces hermanos

Me gusta mucho la funcionalidad que ofrece el módulo books, que viene en el core de Drupal 7. Sirve para crear documentos estructurados de forma que hay un índice de contenidos y puedes ir navegando entre ellos página por página. Sin embargo me encontré con un problema a causa de una petición, y es que los contenidos de un book no quedan reflejados en el mapa Web, es decir, en el menú. Esto puede ser bueno en determinadas circunstancias, pero las necesidades que tenía en ese momento me hicieron prescindir de dicho módulo.

Por ese motivo me planteé crear un módulo custom que me crease un bloque después del contenido para mostrar el siguiente enlace y el anterior. Mediante hook_block_info declaré su existencia y con hook_block_view definí las funciones que generarían su output:

 

Desarrollo del bloque

En la siguiente función tendremos todo el código que vamos a ver en este artículo:

 

Primero obtenemos el elemento de menú actual a través del árbol completo. Vamos a extraerlo y lo metemos en la variable $current_item, y el siguiente elemento ya será el padre del elemento actual, así que lo extraemos y lo meteremos en la variable $padre_item. ¿Por qué hacemos esto? porque necesitamos saber qué elementos están al mismo nivel del elemento actual, es decir, qué elementos de menú son hermanos, y para eso necesitamos al elemento padre:

 

El siguiente paso es obtener todos los elementos de menú de los que cuelga ese padre, así que entre ellos estará el elemento actual y todos los hermanos ordenados.

 

Ahora vamos a recorrer todos los elementos que cuelgan del padre. Para poder aprovechar este bucle vamos a crear una serie de flags que van a tener un valor falso. Estos flags nos van a indicar si la paginación va a tener elemento anterior o elemento siguiente, y por lo tanto, página anterior o página siguiente. Mientras no demos con el elemento actual vamos a guardar el elemento que estamos recorriendo en la variable $anterior, pero en el momento que demos con él vamos a marcar la variable $actual con el valor del contador. Esto hará que la variable $actual deje de ser falsa, y en el siguiente ciclo del bucle accederemos al elemento siguiente, que será guardado en el flag $siguiente. Al salir del bucle tendremos identificadas las páginas siguientes o anteriores al elemento actual.

Lo siguiente es meter en la variable de salida $output los enlaces de página siguiente y anterior. Para ello utilizamos una función que nos va a devolver la URL amigable del elemento en concreto:

 

Finalmente devolveremos todo el output que hemos ido creando:

Colocar el bloque

No nos olvidemos de activar nuestro módulo y colocar el bloque justo debajo del contenido.

Experto en la Gestión de Proyectos Web basados en Drupal con más de 8 años de experiencia. Desarrollo Full Stack (Front-end, Back-end, Site-Builder).

No Replies to "Crear un bloque de navegación entre enlaces hermanos"