Archive for November 11th, 2008

Agregar portlets en un Layout en tiempo de ejecución

Tuesday, November 11th, 2008

A veces, cuando el diseño del sitio es complejo, necesitamos agregar a una página un portlet en determinado lugar del sitio fuera del contendor de portlets, o simplemente queremos agregar un portlet y que aparezca en todas las paginas que utilicen este layout, y que nadie lo pueda mover o cerrar.

Para esto, y a partir de la version 4.3.x de Liferay, tenemos la posibilidad de agregar portlets en tiempo de ejecución en los archivos .tpl que definen los layouts disponibles en el sitio (ubicados en la carpeta “layouttpl”)

Simplemente agregamos esta linea:

$processor.processPortlet("71")

donde 71 es el Id del portlet que quiero agregar.

Entonces un template común, en este caso (30/70) se veria así:

  <table id="layout-grid">
   <tr>
    <td class="lfr-column thirty" id="left" valign="top">
     $processor.processPortlet("71")
     $processor.processColumn("left")
    </td>
    <td class="lfr-column seventy" id="column-1" valign="top">
     $processor.processPortlet("73")
     $processor.processColumn("column-1")
    </td>
   </tr>
  </table>

y en este layout el portlet de navegación (id = 71) y el breadcrumb (id = 73) estarían fijos en todas las paginas que usen este layout por encima del contenedor de portlets de cada columna.

Redirigir a una página despúes de registrarse

Tuesday, November 11th, 2008

Para redirigir a una página de una comunidad después de registrarse en Liferay, hay que agregar un Evento, entonces vamos a hacer lo siguiente:

portal-ext.properties

login.events.post=com.liferay.portal.events.MyLoginPostAction,\

com.liferay.portal.events.DefaultLandingPageAction

MyLoginPostAction.java

package com.liferay.portal.events;

import ….

public class MyLoginPostAction extends Action {
private static Log _log = LogFactory.getLog(MyLoginPostAction.class);

public void run(HttpServletRequest req, HttpServletResponse res) throws ActionException {

try {

Group group = this.getGroup(req);

this.setLastPath(group, req);

} catch(Exception e) {

_log.error(e);

throw new ActionException(e);

}
}

private void getGroup(HttpServletRequest req) {

return null;

}

private void setLastPath(Group group, HttpServletRequest req)
throws PortalException, SystemException {
long defaultPlid = LayoutLocalServiceUtil.getDefaultPlid(group.getGroupId());
Layout defaultLayout = LayoutLocalServiceUtil.getLayout(defaultPlid);
HttpSession ses = req.getSession();
Map<String, String[]> params = new HashMap<String, String[]>();
params.put(“p_l_id”, new String[] { Long.toString(defaultLayout.getPlid()) });
LastPath lastPath = new LastPath(“/c”, “/portal/layout”, params);
ses.setAttribute(WebKeys.LAST_PATH, lastPath);
}
}

En este caso va a redirigir a la primer página publica de la comunidad y si esta no existe la redirige a la primer página privada.

Esto también puede ser para redirigir a una organización o a la página de un usuario.