Entrades amb etiqueta portlet .

Inputs con multi-idioma

Data de publicació 18/12/15 02:15

En un blog anterior explicamos cómo “Sacar partido de la configuración de un portlet”, utilizaremos ese ejemplo para, a continuación, explicar cómo gestionar la información de los inputs en varios idiomas.

Si bien podemos utilizar keys dentro del portlet para determinar su valor en los distintos idiomas, una opción menos rígida es introducir los valores en los distintos idiomas a través de la configuración del portlet.

En nuestro ejemplo teníamos portlet con un título, una imagen y un listado. Dicho título era fijo, aunque cambiaras el idioma el título mostrado sería el mismo. Ahora lo que queremos es poder decidir el texto que utilizaremos de título en función del idioma en que se visualice la página.

 

Diferencias respecto a lo que teníamos:

configuration.jsp: cambia el tipo de tag usado para los input, en esta ocasión utilizaremos <liferay-ui:input-localized> envuelta por un <aui:field-wrapper>. También cambia la forma de manejar sus valores, ahora utilizaremos la clase LocalizationUtil para tratarlos.

 

configuration.jsp
String localizedTitle = LocalizationUtil.getLocalizationXmlFromPreferences(portletPreferences, renderRequest, "title");
 
<liferay-ui:panel collapsible="<%= true %>" extended="<%= true %>" id="customText" persistState="<%= true %>" title="Text">
    <aui:fieldset cssClass="title-data" label="Title Text">
        <aui:field-wrapper cssClass="lfr-input-text-container" label="Title">
            <liferay-ui:input-localized name="title" xml="<%= localizedTitle %>" />
        </aui:field-wrapper>
    </aui:fieldset>
</liferay-ui:panel>

 

Es posible definir que solo muestre para elegir los idiomas del Site con “availableLocales”.

configuration.jsp
<liferay-ui:input-localized name="title" availableLocales="<%= LanguageUtil.getAvailableLocales(themeDisplay.getSiteGroupId()) %>" xml="<%= localizedTitle %>" />

 

También se puede definir que el idioma por defecto sea el que tiene el Site con “defaultLanguageId”:

configuration.jsp
Locale defaultLocale = LocaleUtil.getSiteDefault();
String defaultLanguageId = LocaleUtil.toLanguageId(defaultLocale);
<liferay-ui:input-localized name="title" defaultLanguageId="<%= defaultLanguageId %>" xml="<%= localizedTitle %>" />

 

ConfigurationActionImpl.java: Guardamos los datos localizados.

En este caso, es necesario tratar los datos para poder guardarlos.

 

ConfigurationActionImpl.java
PortletPreferences preferences = actionRequest.getPreferences();
  
// Treat preferences
LocalizationUtil.setLocalizedPreferencesValues(actionRequest, preferences, "title");
  
// Store preferences
preferences.store();
super.processAction(portletConfig, actionRequest, actionResponse);

 

view.jsp: Distinto método de obtener el valor en el idioma actual.

 

  • Obtenemos el valor:
view.jsp
String localizedTitle = LocalizationUtil.getPreferencesValue(preferences, "title", themeDisplay.getLanguageId());

 

  • Utilizamos el valor (ejemplo):
view.jsp
<h1> <%=localizedTitle%> </h1>
<% if (showsImage)  { %>
    <img src="<%=imageLink%>" alt="">
<% } %>
<div><%=contentList%></div>

 

Una vez aplicadas las modificaciones tendremos un nuevo campo en la configuración del portlet con la posibilidad de guardar una información distinta por cada idioma.

Configuration

Espero que os sea de utilidad, un saludo.

 

Sacar partido de la configuración de un portlet

Data de publicació 16/09/15 05:01

A menudo tenemos que definir ciertos comportamientos que tiene un portlet en diferentes situaciones. Un ejemplo claro seria un formulario de contacto; pensad en la situación que tenemos tres sitios web que necesitan de este portlet. Y cada uno necesita que el formulario se envíe a un correo electrónico diferente, con un asunto específico según el sitio de dónde se envíe. Para evitar tener que crear un portlet para cada web podemos aprovechar la configuración del portlet para determinar cómo queremos que sea su comportamiento.

Haremos un ejemplo simple en el que mediante el panel de configuración de un portlet, que muestra un título, una imagen y un listado, podamos decidir si queremos que se muestre la imagen.

 

Paso 1: Especificar cuál será el archivo ".jsp" de la configuración en el "portlet.xml".

Añadimos el siguiente código después del tag “<portlet-class>...</portlet-class>” con la localización de nuestro archivo ".jsp" como value.

< init-param >
      < name >config-template</ name >
      < value >/html/configuration.jsp</ value >
</ init-param >

 

Paso 2: Crear el archivo jsp “configuration.jsp”.

Creamos un archivo "configuration.jsp" en el directorio indicado en el portlet.xml, en nuestro caso, en “/html/configuration.jsp”. 

<%@include file="/html/init.jsp" %>
< liferay-portlet:actionURL   portletConfiguration = "true"   var = "configurationURL"   />
<%
boolean showsImage = GetterUtil.getBoolean(portletPreferences.getValue("showsImageCheck", StringPool.TRUE));
%>
< aui:form   action="<%= configurationURL %>" method="post" name="fm">
     < aui:input   name="<%= Constants.CMD %>" type="hidden" value="<%= Constants.UPDATE %>" />
     < liferay-ui:success   key = "success-setup"   message = "you-have-successfully-updated-the-setup"   />
     < liferay-ui:panel   collapsible="<%=true%>" extended="<%=true%>" id="config" persistState="<%= true %>" title="Configuration">
         < aui:fieldset   cssClass = "option-content-data"   label = "Options" >
             < aui:input   label = "Shows Image"   name = "preferences--showsImageCheck--"   type = "checkbox"   value="<%= showsImage %>" />
         </ aui:fieldset >
     </ liferay-ui:panel >
     < aui:button-row >
        < aui:button   type = "submit"   />
     </ aui:button-row >
</ aui:form >

Nota: Es posible estructurar las opciones de la configuración en distintos paneles siempre que el id del panel no se repita o separarlos por fields.

Creamos o añadimos (si es necesario) el archivo "init.jsp" con el siguiente contenido.

<%@ taglib uri=" prefix="c" %>
 
<%@ taglib uri="  prefix="aui" %>
<%@ taglib uri="  prefix="liferay-ui" %>
<%@ taglib uri="  prefix="liferay-portlet" %>
<%@ taglib uri="  prefix="liferay-theme" %>
<%@ taglib uri="  prefix="portlet" %>
 
<%@ page import="com.liferay.portal.kernel.util.Constants" %>
<%@ page import="com.liferay.portal.kernel.util.GetterUtil" %>
<%@ page import="com.liferay.portal.kernel.util.StringPool" %>
<%@ page import="com.liferay.portal.kernel.util.ParamUtil" %>
<%@ page import="com.liferay.portal.kernel.util.Validator" %>
<%@ page import="com.liferay.portlet.PortletPreferencesFactoryUtil" %>
<%@ page import="com.liferay.portal.util.PortalUtil" %>
 
<%@ page import="javax.portlet.ActionRequest" %>
<%@ page import="javax.portlet.PortletPreferences" %>
 
< portlet:defineObjects />
< liferay-theme:defineObjects />
 
<%
PortletPreferences preferences = null;
if (renderRequest != null) {
    preferences = renderRequest.getPreferences();
}
String portletResource = ParamUtil.getString(request, "portletResource");
if (Validator.isNotNull(portletResource)) {
    preferences = PortletPreferencesFactoryUtil.getPortletSetup(request, portletResource);
}
%>

 

 Y añadimos las dependencias necesarias en “liferay-plugin-package.properties”.

portal-dependency-jars=\
    jstl-api.jar,\
    jstl-impl.jar

 

Paso 3: Crear el archivo "ConfigurationActionImpl.java" y configurar el “liferay-portlet.xml”.

Creamos el archivo "ConfigurationActionImpl.java" dentro del package “org.portlet.name.action” y, además, tenemos que especificar “DefaultConfigurationAction” como superclase de ésta.

package org.portlet.name.action;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import javax.portlet.PortletPreferences;
 
import com.liferay.portal.kernel.portlet.DefaultConfigurationAction;
 
public class ConfigurationActionImpl extends DefaultConfigurationAction {
 
    @Override
    public void processAction(PortletConfig portletConfig, ActionRequest actionRequest,
        ActionResponse actionResponse) throws Exception {
 
        PortletPreferences prefs = actionRequest.getPreferences();
        // Treat preferences
 
        // Store preferences
        preferences.store();
        super.processAction(portletConfig, actionRequest, actionResponse);
    }
}

 

Tratamos las preferences si fuera necesario y las guardamos.

Añadimos el elemento al “liferay-portlet.xml” después del tag “<icon>...</icon>”.

 

< configuration-action-class >org.portlet.name.action.ConfigurationActionImpl</ configuration-action-class >

 

Paso 4: Modificamos nuestros archivo ".jsp" para utilizar los valores que extraemos de la configuración del portlet.

- Obtenemos el valor:

<%
boolean showsImage = GetterUtil.getBoolean(portletPreferences.getValue("showsImageCheck", StringPool.TRUE));
%>

 

- Utilizamos el valor (ejemplo):

< h1 > <%=titleText%> </ h1 >
<% if (showsImage)  { %>
    < img   src="<%=imageLink%>" alt="">
<% } %>
< div ><%=contentList%></ div >

Una vez realizado todos los pasos, al acceder a la configuración del portlet tendremos una nueva pestaña con las opciones que hayamos incluido.

Y este sería el resultado:

Un Saludo.

 

En busca del portlet perdido

Data de publicació 19/06/15 13:34

Hay veces que tenemos que modificar un portlet que no sabemos en cuál de las 200 páginas del site está. Y, hay otras veces, que lo tenemos localizado pero no sabemos si se está utilizando en otras páginas.

 

1. Averiguar el nombre del portlet

Los portlets por defecto están definidos por números. El listado de portlets por defecto de un server se puede encontrar en el fichero /webapps/ROOT/WEB-INF/portlet-custom.xml

Por ejemplo el Asset Publisher sería el 101.

Los portlets custom podemos saber su nombre mirando el portlet id o portlet name en /docroot/WEB-INF/liferay-display.xml o /docroot/WEB-INF/portlet.xml

Hay que tener en cuenta que al generar el id ignora espacios o guiones, por lo que un <portlet-name>custom-name</portlet-name> pasaría a ser customname_WAR_customnameportlet

Si tenemos localizado una de las páginas donde aparece el portlet también podemos sacar su id accediendo a la ‘Configuration’ del portlet y después a la pestaña ‘Sharing’.

 

2. Buscar las páginas en las que se encuentra nuestro portlet

Una vez tenemos el nombre de nuestro portlet ya podemos utilizar la siguiente consulta SQL para averiguar en qué páginas se encuentra.

 

SQL: SELECT friendlyURL, typeSettings FROM databasename.Layout WHERE typeSettings LIKE '%customname%';

 

Ésta consulta nos mostrará las urls de las páginas en las que podemos encontrar nuestro portlet. Además, está el apartado ‘typeSettings’ que nos indica todos los portlets que contiene dicha página, aparte del que estábamos buscando.

También existe una aplicación para Liferay 6.1 que muestra esta información, se puede encontrar ‘Where is my portlet’ en el ‘Marketplace’ 

Espero que la explicación os ayude a encontrar esos portlets que hace tiempo desaparecieron de vuestra memoria.

¡Un saludo!

 

Bloggers recents Bloggers recents

Oscar Rodríguez
Apunts: 9
Estrelles: 2
Data: 28/09/16
David Berruezo
Apunts: 14
Estrelles: 1
Data: 22/07/16
Javi Martín
Apunts: 2
Estrelles: 1
Data: 20/05/16
Javier Torres
Apunts: 5
Estrelles: 3
Data: 11/04/16
Sergi Mingueza
Apunts: 4
Estrelles: 1
Data: 19/10/15
Matilde Gallardo
Apunts: 1
Estrelles: 0
Data: 26/02/15
Adrià Vilà
Apunts: 4
Estrelles: 4
Data: 31/08/14
Elena Ruiz
Apunts: 1
Estrelles: 2
Data: 13/03/14