Hoy vamos a ver como podemos hacer nuestro primer hook para Liferay 6.
La primera pregunta que nos surge es ?Que es un Hook?. Un hook es un elemento de liferay que nos permite alterar el funcionamiento por defecto de un portlet de liferay ya existente, como por ejemplo el portlet buscador.
Debemos tener en cuenta que los hooks alteran el funcionamiento del portlet que queramos manteniendo todas sus funcionalidades originales salvo aquello que nosotros alteremos en el Hook.
?Que diferencia hay entre hacer un hook o crear una copia del mismo portlet y luego modificar lo que queramos sobre ese portlet nuevo? La diferencia es que si utilizamos un hook solo tendremos disponible el portlet con la funcionalidad alterada del hook mientras que si creamos un portlet nuevo con las modificaciones oportunas que haríamos con el hook tendremos disponible tanto el portlet original como el nuevo que hemos creado.
Cada uno debe elegir en cada caso que es lo que más le conviene según la situación.
Para empezar a desarrollar los hooks debemos tener instalado el servidor de liferay junto con su plugin SDK. Podemos ver como hacerlo en el post anterior Como instalar Liferay 6.
Una vez instalado el servidor debemos tener el entorno de desarrollo para componentes de Liferay para Eclipse. Podeis ver como instalarlo en otro post anterior Instalar IDE Liferay de Eclipse.
También debemos descargarnos el SRC de Liferay donde podremos encontrar todo el código fuente de Liferay el cual necesitaremos para saber donde debemos modificar y las rutas de cada portlet dentro de Liferay. Podemos descargarlo desde el siguiente enlace, debemos seleccionar "Portal Source". Lo último será importar el código fuente a eclipse y estamos preparados para empezar.
Una vez hecho todo ésto ya estamos listos para empezar a desarrollar un hook.
Como ejemplo a desarrollar vamos a cojer el portlet de blogs y modificar su código mediante un hook para que muestre un texto por ejemplo "FECHA:".
Para crear nuestro primer hook debemos ir al eclipse, justo debajo de search podemos ver un icono cuadrado oscuro de "Create a new Liferay Plugin Proyect".
Le damos y nos aparece una nueva ventana donde seleccionamos el nombre del proyecto(MiHook) y más abajo seleccionamos como tipo de plugin Hook.
Podemos observar también en esta ventana que podemos seleccionar tanto el plugin SDK a usar como el servidor, en nuestro caso, sólo tendremos uno y no deberemos de modificar nada pero si tuvieramos más de 1 servidor nos aparecerían ahí todos los que tuvieramos.
Una vez hecho todo le damos a "Finish".
Ya tenemos el hook creado pero está vacío.
Ahora debemos ir al SRC de Liferay y buscar donde se encuentra el portlet a modificar, en nuestro caso el de blogs.
Se encuentra en portal->portal-web->docroot->html->portlet->blogs.
Para hacer el hook debemos de copiar el archivo a modificar del portlet, en esta caso sería "view_entry_content.jsp", y copiarlo en nuestro hook pero de la siguiente manera:
Debemos de reproducir toda la ruta del archivo a modificar del portlet en nuestro hook desde la carpeta HTML a partir de /docroot/WEB-INF del hook.
En nuestro caso, el archivo view_entry_content.jsp del portlet blogs a modificar esta en: /portal-web/docroot/html/portlet/blogs/view_entry_content.jsp
Nuestro hook quedaría de la siguiente forma estructurado: MiHook-hook/docroot/WEB-INF/html/portlet/blogs/view_entry_content.jsp. En view_entry_content.jsp es donde debemos de copiar el código del fichero del portlet y es aquí donde modificaremos el código para que el hook sobreescriba las funciones del portlet.
Una vez creada la estructura del hook vamos a modificar el archivo view_entry_content.js del hook para mostrar el mensaje "FECHA:" para que salga delante de la fecha de publicación de cada entrada del blog.
En nuestro caso, deberíamos de buscar el bloque que tiene por class "entry-date" y ahi dentro añadir una línea como la siguiente:
FECHA:
Como vemos es muy simple de modificar lo que nosotros queramos. Acordaros siempre de hacerlo sobre la copia de la jsp sobre el hook.
Por último debemos indicar la ruta a partir de la cual liferay debe buscar los cambios de nuestro hook. Esto se debe hacer sobre el fichero liferay-hook.xml que se encuentra en /MiHook-hook/docroot/WEB-INF/liferay-hook.xml
Aquí dentro debemos de añadir entre las etiquetas
<hook><custom-jsp-dir>/WEB-INF</custom-jsp-dir>
De esta forma indicamos que la carpeta HTML cuelga de WEB-INF. Si quisieramos podríamos cambiar la estructuración de nuestro hook e indicarle aquí donde se haya la carpeta HTML.
Para terminar solo nos queda desplegar el hook yendo a la ventana de ant en el eclipse que se encuentra abajo a la derecha.
Selecionamos nuestro hook, lo abrimos, buscamos "deploy" y clicamos sobre él.
Una vez termine de desplegar tendremos listo nuestro hook. Tan solo debemos ir al navegadory abrir liferay(http://localhost:8080) acordándonos de lanzarlo antes de abrirlo obviamente y una vez abierto añadimos el portlet blogs a cualquier página, añadimos una entrada al blog y podremos ver como se muestra el mensaje "FECHA:" junto a la fecha de publicación de cada entrada.
Podeis descargaros el hook completo aquí
Espero que os sea de utilidad