Hooks en Liferay

De Dos Ideas.
Revisión del 19:38 23 jul 2013 de Emiliano.tebes (discusión | contribuciones) (Página creada con '==Qué es un Hook? == Es una extensión de un componente de Liferay, es decir, tomar un componente que ya posee y sobreescribir ciertas cosas para adecuarlo a nuestras necesidad…')
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Qué es un Hook?

Es una extensión de un componente de Liferay, es decir, tomar un componente que ya posee y sobreescribir ciertas cosas para adecuarlo a nuestras necesidades.

¿Cómo creo un Hook?

Para crear un hook podemos utilizar el arquetipo de maven liferay-hook-archetype

Hook de Asset Publisher

Un asset publisher nos muestra publicaciones que va recolectando de distintas páginas del sitio. Tiene por default 4 formas de mostrarse:

  • table
  • title-list
  • abstracts
  • full-content

En este caso, supongamos que ninguna de estas formas nos resultan adecuadas, y que queremos mostrarlo de alguna otra manera. Para esto, debemos realizar lo siguiente:

  • Crear el hook con el arquetipo de Maven.
  • En la estructura del proyecto, crear un nuevo JSP en WEB-INF/jsp/html/portlet/asset_publisher/display/nuestraVista.jsp
  • Una posible implementación de dicho jsp es esta:

<%@ include file="/html/portlet/asset_publisher/init.jsp" %>

<%

   List results = (List) request.getAttribute("view.jsp-results");
   int assetEntryIndex = ((Integer) request.getAttribute("view.jsp-assetEntryIndex")).intValue();
   AssetEntry assetEntry = (AssetEntry) request.getAttribute("view.jsp-assetEntry");
   AssetRendererFactory assetRendererFactory = (AssetRendererFactory) request.getAttribute("view.jsp-assetRendererFactory");
   AssetRenderer assetRenderer = (AssetRenderer) request.getAttribute("view.jsp-assetRenderer");
   boolean show = ((Boolean) request.getAttribute("view.jsp-show")).booleanValue();
   request.setAttribute("view.jsp-showIconLabel", true);
   String title = (String) request.getAttribute("view.jsp-title");
   if (Validator.isNull(title)) {
       title = assetRenderer.getTitle(locale);
   }
   PortletURL viewFullContentURL = renderResponse.createRenderURL();
   viewFullContentURL.setParameter("struts_action", "/asset_publisher/view_content");
   viewFullContentURL.setParameter("assetEntryId", String.valueOf(assetEntry.getEntryId()));
   viewFullContentURL.setParameter("type", assetRendererFactory.getType());
   if (Validator.isNotNull(assetRenderer.getUrlTitle())) {
       if (assetRenderer.getGroupId() != scopeGroupId) {
           viewFullContentURL.setParameter("groupId", String.valueOf(assetRenderer.getGroupId()));
       }
       viewFullContentURL.setParameter("urlTitle", assetRenderer.getUrlTitle());
   }
   String summary = StringUtil.shorten(assetRenderer.getSummary(locale), abstractLength);
   String viewURL = null;
   if (viewInContext) {
       String viewFullContentURLString = viewFullContentURL.toString();
       viewFullContentURLString = HttpUtil.setParameter(viewFullContentURLString, "redirect", currentURL);
       viewURL = assetRenderer.getURLViewInContext(liferayPortletRequest, liferayPortletResponse, viewFullContentURLString);
       viewURL = HttpUtil.setParameter(viewURL, "redirect", currentURL);
   } else {
       viewURL = viewFullContentURL.toString();
   }
   if (Validator.isNull(viewURL)) {
       viewURL = viewFullContentURL.toString();
   }
   String viewURLMessage = viewInContext ? assetRenderer.getViewInContextMessage() : "read-more-x-about-x";
   viewURL = _checkViewURL(viewURL, currentURL, themeDisplay);

%>

<%if (assetEntryIndex == 0) {%>


    <%}%>
  • <%= title%>

    <%= summary%>

    <a href='<%=viewURL%>'>Leer mas</a>


  • <%if (assetEntryIndex == results.size()-1) {%>

<%}%>

  • Esta implementación utiliza clases de Liferay para obtener los valores a mostrar (en este caso título, descripción y un link)