Agregar portlets en un Layout en tiempo de ejecución

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.

Publicado en desarrollo | Etiquetado , | Deja un comentario

Redirigir a una página despúes de registrarse

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.

Publicado en desarrollo | Etiquetado | 5 comentarios

Configurar las preferencias de los Portlets

En primer lugar vamos a crear un portlet con el Plugin SDK y luego vamos a editar el archivo $SDK_HOME/docroot/WEB-INF/portlet.xml.

En este caso vamos a ver la configuración del Portlet RSS para tener un ejemplo concreto para ver, luego de agregar las propiedades vamos a ver como obtenemos dichos valores.

<portlet>
    <portlet-name>RSS</portlet-name> 
    <display-name>RSS</display-name> 
    <portlet-class>com.liferay.portlet.StrutsPortlet</portlet-class> 
    <init-param> 
         <name>view-action</name> 
         <value>/rss/view</value> 
    </init-param> 
    <expiration-cache>0</expiration-cache> 
    <supports> 
          <mime-type>text/html</mime-type> 
    </supports> 
    <resource-bundle>com.liferay.portlet.StrutsResourceBundle</resource-bundle> 
    <portlet-preferences> 
         <preference> 
              <name>urls</name> 
              <value>http://rss.news.yahoo.com/rss/tech</value> 
              <value>http://csmonitor.com/rss/scitech.rss</value> 
              <value>http://partners.userland.com/nytRss/technology.xml</value> 
         </preference> 
         <preference> 
              <name>items-per-channel</name> 
              <value>2</value> 
         </preference>
    </portlet-preferences> 
    <security-role-ref> 
          <role-name>power-user</role-name> 
     </security-role-ref> 
     <security-role-ref> 
          <role-name>user</role-name> 
     </security-role-ref>
</portlet>

En ese caso hemos creado 2 preferencias, urls y items-per-channel

Para obener estos valores hay que hacer:

PortletPreferences porttletPreferences = renderRequest.getPortletPreferences();
String[] urls = porttletPreferences.getValues("urls", new String[]());
long ipc = GetterUtil.getLong(portletPreferences.getValue("items-per-channel"));
Publicado en configuracion, General | Etiquetado , | Deja un comentario

Antes de comenzar

Antes de comenzar con Liferay, voy a hacer un resumen de las propiedades más importantes

portal-ext.properties

# El nombre de la compañia por default
company.default.web.id=miproyecto.com
 
# Especifica como el usuario puede loguearse al sistema
 
# Valores que puede tomar esta propiedad: emailAddress, screenName, userId
company.security.auth.type=emailAddress
 
# Permite si un usuario no logueado puede crear o no una cuenta
company.security.strangers=true
 
# Locales disponibles
locales=es_ES
 
# Si esta propiedad esta en true, un usuario invitado toma como por default el lenguaje de la aplicacion.
 
# Caso contrario toma el valor de header del request.
locale.default.request=false
 
# Los Time Zones disponibles
time.zones=America/Buenos_aires
 
# Directorio donde Liferay guardar los indices de Lucene, los archivos de Document Library, Jackrabbit, etc.
resource.repositories.root=${user.home}/liferay/miproyecto
 
# Si esta propiedad esta en true, carga todo el css en un archivo comprimido (SUPER RECOMENDADO)
theme.css.fast.load=true
 
# Si esta propiedad esta en true, carga todo el javascript en un archivo comprimido (SUPER RECOMENDADO)
javascript.fast.load=true

system-ext.properties

#País y Lenguaje predeterminado
user.country=AR
user.language=es
 
# Time Zone predeterminado
user.timezone=GMT
Publicado en configuracion, General | Deja un comentario

Crear un Portlet con el Plugins SDK

Para crear un portlet vamos a utilizar la versión 5.1.2 de Liferay, y requerimos los siguientes componentes:

  1. ANT 1.7
  2. JAVA
  3. MySQL (opcional)
  4. liferay-portal-tomcat-5.5-5.1.2
  5. liferay-plugins-sdk-5.1.2

Liferay se puede descargar desde http://sourceforge.net/projects/lportal/.

Paso a seguir:

  • Variables de entorno

SDK_HOME=/home/joyola/desarrollo/liferay/liferay-plugins-sdk-5.1.2
TOMCAT_HOME=/home/joyola/desarrollo/liferay/liferay-portal-tomcat-5.5-5.1.2

  • Configuracion del SDK

Creamos el archivo: $SDK_HOME/build.${user.name}.properties. Todas la propiedades utilizadas aca, sobreescriben el valor por default de las propiedades del archivo build.properties.

A continuación se especifican aquellas propiedades necesarias para comenzar.

#
# Specify the paths to an unzipped Tomcat 5.5.x bundle.
#
app.server.dir=${project.dir}/../liferay-portal-tomcat-5.5-5.1.2
app.server.portal.dir=${app.server.dir}/webapps/ROOT
app.server.classes.portal.dir=${app.server.portal.dir}/WEB-INF/classes
app.server.lib.portal.dir=${app.server.portal.dir}/WEB-INF/lib
app.server.lib.global.dir=${app.server.dir}/common/lib/ext
 
#
# Plugins will be deployed to this directory. Make sure that Liferay is
# also set to scan this directory.
#
auto.deploy.dir=${user.home}/liferay/deploy
  • Crear el portlet

Ejecutamos el comando: $SDK_HOME/portlets/create.sh miportlet “Mi Portlet”
Este comando tiene 2 parametros:

  1. Portlet Id
  2. Display name
  • Tasks más utilizados
  1. clean: elimina los archivos generados por los otros comandos
  2. compile: compila los java
  3. war: genera el war
  4. deploy: compila, genera el war y lo copia al directorio deploy
  • Ejecutamos el deploy

En el directorio $SDK_HOME/portles/miportlet-portlet, ejecutamos el comando: ant deploy

Acá tenemos un problema con esta versión, el archivo build.xml no es copiado cuando se crea el portlet.  Por lo tanto tenemos que copiar el build.xml de una versión anterior del plugin, también es necesario agregar el build.xml al portlet.zip para que la proxima vez que creamos un portlet no tengamos este mismo error.

  • Tomcat

Iniciamos el TOMCAT, para esto ejecutamos el comando:
$TOMCAT_HOME/bin/startup.sh

  • Agregamos el portlet a una página
  1. Entar a http://localhost:8080/c/portal/login
  2. Usuario: test@liferay.com y Password: test
  3. Ir al dock, hacer click en Add Portlet
  4. Buscar el nuevo portlet
  5. Hacer click sobre add

Links:

http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Plugins+SDK

Publicado en desarrollo, General | Etiquetado , | Deja un comentario

¡Hola, mundo!

Te doy la bienvenida a Liferay Latino Blog. La idea de esto Blog es compartir mi conocimiento adquirido en estos 2 años en lo que estuve trabajando con Liferay, y el otro motivo importante que me lleva a escribir este blog es seguir aprendiendo e investigando Liferay.

Espero que les sirva de referencia, y que puedan participar de este proyecto que estoy iniciando en este momento.

Desde ya muchas gracias,

Saludos

LR Latino Blog

Publicado en General | 2 comentarios