Mostrando entradas con la etiqueta cms liferay. Mostrar todas las entradas
Mostrando entradas con la etiqueta cms liferay. Mostrar todas las entradas

7 de mayo de 2017

:: Liferay. Tip para determinar si un portal está desarrollado en Liferay

Aunque existen multitud de extensiones que permiten identificar los detalles sobre la plataforma de desarrollo de un portal web, una forma rápida y sencilla de determinar si un portal está desarrollado con este gestor, sería:

.- Abrir la consola en el navegador (F12 en Chrome y seleccionar la pestaña "Console")

.- Escribir en la consola "Liferay" y pulsar Intro

Si esta petición nos devuelve un objeto, indicará que el portal web que nos ocupa está desarrollado con este gestor


Si por el contrario la respuesta obtenida es: "Liferay no está definido", indicará que este portal no está desarrollado con Liferay.

18 de mayo de 2016

:: Liferay. Modificar los términos de uso

Cuando un usuario accede por primera vez con sus credenciales al CMS Liferay, en uno de los pasos debe aceptar los términos o condiciones de uso (si esta opción no se ha deshabilitado).

Este texto tipo aparece en inglés y, en ocasiones puede ser necesaria una adaptación o personalización de las condiciones de uso que deben mostrarse al usuario. Para ello, deberemos seguir los pasos siguientes:

.- Crearemos un nuevo contenido (puede ser global) con la descripción de los términos de uso que debe aceptar el usuario


.- Configuramos las siguientes líneas en el fichero: portal-ext.properties
terms.of.use.journal.article.group.id=xxxx
terms.of.use.journal.article.id=yyyy

Donde "xxxx" es el identificador del grupo e "yyyy" es el identificador del propio contenido que acabamos de crear.

.- Reiniciaremos el servicio de Liferay y a partir de este momento se mostrarán los nuevos términos de uso a todos los usuarios que accedan al portal

NOTA: Son necesarias las dos líneas y que ambas tengan el valor correcto

15 de mayo de 2016

:: Liferay. Para qué sirve el fichero liferay-display.xml

El fichero "docroot/WEB-INF/liferay-display.xml" describe la categoría bajo la que aparecerá nuestro portlet a la hora de añadirlo a una página.
De esta manera, podemos tener organizados y categorizados nuestros desarrollos.

Un ejemplo de contenido de este fichero podría ser el siguiente, donde nuestro portlet con identificador "libraryportlet" aparecerá bajo la categoría "netic360".
< ?xml version="1.0"? >
< !DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.1.0//EN" "http://www.liferay.com/dtd/liferay-display_6_1_0.dtd" >
< display >
< category name="netic360" >
< portlet id="libraryportlet" >< /portlet >
< /category >
< /display >

Así mismo podemos anidar categorías según nuestras necesidades.
< ?xml version="1.0"? >
< !DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.1.0//EN" "http://www.liferay.com/dtd/liferay-display_6_1_0.dtd" >

< display >
< category name="netic360" >
< category name="Tienda libros" >
< category name="Tercer nivel" >
< portlet id="libraryportlet" >< /portlet >
< /category >
< /category >
< /category >
< /display >
En el fichero anterior, nuestro portlet aparecerá bajo la categoría "netic360" > "Tienda libros" > "Tercer nivel".

26 de marzo de 2016

:: Liferay. Comprobar si estamos logueados

A veces necesitamos saber si el usuario está o no logueado para aplicar una u otra opción en una plantilla Velocity. Para ello, podemos utilizar el código siguiente:

#set ($themeDisplay = $httpServletRequest.getAttribute("THEME_DISPLAY"))
$themeDisplay.isSignedIn()
Los pasos a seguir para crear una prueba de concepto son los descritos a continuación:
1.- Creamos una estructura sencilla
< ?xml version="1.0"? >
< root >
    < dynamic-element name="titulo" type="text" index-type="" repeatable="false"/ >
    < dynamic-element name="texto" type="text_box" index-type="" repeatable="false"/ >
< /root >

2.- Creamos una plantilla asociada que nos mostrará un mensaje si estamos logueados, y otro distinto en caso contrario
#set($serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext())
#set($httpServletRequest = $serviceContext.getRequest())
#set($themeDisplay = $httpServletRequest.getAttribute("THEME_DISPLAY"))
< div >
    $titulo.data

    $texto.data

    #if($themeDisplay.isSignedIn())
        El usuario está logueado

    #else
        El usuario no está logueado

    #end
< /div >

3.- Añadimos un contenido del nuevo tipo de datos definido (estructura)

4.- En una página insertamos un publicador de contenidos que muestre esta información

5.- Estando des-logueados comprobamos el mensaje que se muestra

6.- Estando loguegados comprobamos que el mensaje mostrado es el que corresponde

Una tarea sencilla que puede ser de utilidad y que muchas veces no recordamos cómo se hace.

2 de marzo de 2016

:: Liferay. Deshabilitar la creación del sitio privado para cada usuario

Para evitar la creación de un sitio privado cada vez que creamos un nuevo usuario en Liferay, debemos especificar esta línea en el fichero: portal-ext.properties

layout.user.private.layouts.enabled=false

25 de febrero de 2016

:: Liferay. Expiración de contenidos. ¿Bug?

Esta entrada describe un posible "bug" en la expiración de un contenido desde el gestor de portales Liferay, en la que se da un comportamiento que puede despistar a algunos usuarios.

Cuando un usuario decide expirar un contenido web, accederá a la planificación temporal del mismo y desmarcará el "check" denominado "No expira automáticamente". A continuación seleccionará la fecha y hora en la que desea que este contenido expire.

De lo que muchas veces no nos percatamos es que el año por que por defecto aparece es el de publicación del evento mas uno, por lo que en realidad el usuario está definiendo un contenido que expirará dentro de un año; nada más lejos de su intención.
Hasta aquí el comportamiento es el normal y esperado, pero que sin embargo induce a error de muchos usuarios encargados de la gestión de contenidos web.

Por otro lado, si el usuario se percata de esto, puede especificar una fecha y hora correctas y tras pulsar sobre el botón "Publicar" no obtendrá ningún mensaje indicándole que existen datos incorrectos, pero cuando acceda de nuevo a la edición de esa entrada, comprobará que la fecha de expiración no ha sido almacenada.
La consideración a tener en cuenta que quizás podría considerarse como un bug ya que no se informa -en ningún momento al usuario- es que esta fecha de expiración (fecha y hora) debe ser posterior a la actual ya que de lo contrario no se almacenará.

Teniendo en cuenta estos dos pequeños detalles, evitarremos perder tiempo evaluando el correcto o incorrecto funcionamiento de la expiración de contenidos.

22 de noviembre de 2015

:: Liferay. Soporte para nuevo idioma

Si bien Liferay da soporte a multitud de idiomas, puede ser que en un momento determinado tengamos que incluir uno nuevo no soportado por defecto.
En nuestro caso, para dar soporte al Asturiano (Bable) hemos seguido los siguientes pasos que describimos a continuación.

.- Añadir la siguiente entrada en el fichero portal-ext.properties
locales=ar_SA,eu_ES,bg_BG,ca_AD,ca_ES,zh_CN,zh_TW,hr_HR,cs_CZ,da_DK,nl_NL,nl_BE,en_US,en_GB,et_EE,fi_FI,fr_FR,gl_ES,de_DE,el_GR,iw_IL,hi_IN,hu_HU,in_ID,it_IT,ja_JP,ko_KR,lo_LA,nb_NO,fa_IR,pl_PL,pt_BR,pt_PT,ro_RO,ru_RU,sr_RS,sr_RS_latin,sl_SI,sk_SK,es_ES,sv_SE,tr_TR,uk_UA,vi_VN, ast_ES

.- Copiar el icono de la bandera en:  (HOOK)
C:\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\html\themes\control_panel\images\languageC:\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\html\themes\classic\images\language

.- En el fichero web.xml ubicado en la siguiente ruta: (PLUGIN -EXT)
C:\liferay-portal-6.1.1-ce-ga2\tomcat-7.0.27\webapps\ROOT\WEB-INF
Añadir las siguientes lineas:
< servlet-mapping >
                               < servlet-name >I18n Servlet</ servlet-name >
                               < url-pattern >/ast/*</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
                < servlet-name >I18n Servlet</ servlet-name >
                < url-pattern >/ast_ES/*</ url-pattern >
</ servlet-mapping >

< url-pattern >/ast/c/portal/protected</ url-pattern >

< url-pattern >/ast_ES/c/portal/protected</ url-pattern >

.- Añadir los ficheros de traducciones siguientes:  (HOOK)
language_ast.properties
language_ast_ES.properties
.- Copiar los ficheros anteriores en la siguiente ruta:
C:\liferay-portal-src-6.1.1-ce-ga2\portal-impl\src\content

.- Establecer las preferencias de presentación en:
Portal > Configuración > Preferencias de presentación
es_ES,ast_ES

.- El fichero de recursos tienen que llamarse: Language_ast_ES.properties
En las pruebas realizadas, no cogía las traducciones utilizando Language_ast.properties, por lo que únicamente se utiliza Language_ast_ES.properties

.- En el fichero “liferay-hook.xml” es necesario añadir la entrada siguiente:

content/Language_ast_ES.properties

Estas son algunas guías básicas que pueden contener errores, por lo que cualquier aportación siempre es
 bienvenida.

19 de noviembre de 2015

:: Liferay. Generar fichero .ICS desde Velocity

Para generar un fichero .ICS con los eventos de la agenda desde una plantilla Velocity en el CMS Liferay, el código a utilizar es el siguiente:


#set ($serviceContext = $portal.getClass().forName("com.liferay.portal.service.ServiceContextThreadLocal").getServiceContext())
#set ($httpServletRequest = $serviceContext.getRequest())
##get the real themeDisplay object, not the $themeDisplay map
#set ($objThemeDisplay = $httpServletRequest.getAttribute("THEME_DISPLAY"))

#set ($exportURL = $portletURLFactory.create($httpServletRequest, "8", $objThemeDisplay.getPlid(), "ACTION_PHASE"))
#set ($temp = $exportURL.setWindowState("exclusive"))
#set ($temp = $exportURL.setPortletMode("view"))
#set ($temp = $exportURL.setParameter("struts_action", "/calendar/export_events"))
#set ($temp = $exportURL.setParameter("exportFileName", "events.ics"))


Sobre la capa con la clase "export-ics" aplicaremos los estilos que sean necesarios.

11 de noviembre de 2015

:: Liferay. Comprobar si una página es pública o privada

Cuando estamos desarrollando en Liferay, en alguna ocasión necesitamos saber si una página es pública o privada.
Para llevar a cabo esta tarea en este CMS, podemos hacerlo desde Velocity con el siguiente código:
#if($layout.isPublicLayout())
#else
#end
Para cada petición "request", $layout representa la página actual a cargar.
De esta manera, el código anterior podemos insertarlo en cualquier plantilla Velocity que tengamos en el tema, normalmente en:

  • portal_normal.vm
  • init_custom.vm

8 de noviembre de 2015

:: Liferay. Crear usuarios sin correo electrónico

En ocasiones es necesario crear usuarios en Liferay sin que estos lleven asociada una dirección de correo electrónico. Para ello deberemos editar el fichero portal-ext.properties y añadir la siguiente linea:
users.email.address.required=false
Podemos añadir además la siguiente linea para que al usuario se le genere -de forma automática- una dirección de correo electrónico:
users.email.address.auto.suffix=@dominio.extension

Donde el literal "dominio.extension" lo sustituiríamos  por el que sea necesario, por ejemplo: "netic360.com"

De esta manera, se crearían usuarios sin especificar una dirección de correo electrónico, generándose una -de forma automática- para estos.

30 de octubre de 2015

:: Liferay. Problema con Javascript minifier

Aunque el funcionamiento del código era correcto, al acceder por primera vez a ese contenido (en este caso en un portal desarrollado sobre el CMS Liferay), en el log aparecía un mensaje de error similar a este:

ERROR [ajp-8009-1][MinifierUtil:101] 71: 73: missing name after . operator
ERROR [ajp-8009-1][MinifierUtil:101] 1: 0: Compilation produced 1 syntax errors.
ERROR [ajp-8009-1][MinifierUtil:79] JavaScript Minifier failed for

Al tratarse de un error de sintaxis, la primera tarea fue comprobar que efectivamente no existiera algún error sintáctico en el código. Tras perder un poco de tiempo, aparentemente, todo era correcto aunque en el log el mensaje seguía apareciendo.

En una de las lineas del código aparecía lo siguiente (cuya sintaxis es correcta):
video.thumbnail=response.items[i].snippet.thumbnails.default.url;

Tras buscar alguna solución, encontré algo relacionado con el "dot notation" y "bracket notation".
video.thumbnail=response.items[i].snippet.thumbnails['default'].url;

La solución para evitar ese mensaje de error en el log, era sustituir la palabra reservada "default" por la codificación utilizando "bracket notation".


1 de diciembre de 2014

:: Liferay. Modificar los tipos de eventos de la agenda

Para modificar los tipos de eventos que aparecerán como disponibles en el desplegable, insertaremos la información necesaria en el fichero portal-ext.properties, dejando únicamente las entradas que nos interesen. Como primera entrada podemos ubicar la opción "event" para que sea la que aparece seleccionada por defecto a la hora de crear una nueva entrada La entrada en el fichero portal-ext.properties podría quedar de la siguiente forma:
### Tipos de eventos del calendario calendar.event.types=event,appointment,call,class,dinner,holiday,interview,lunch,meeting,net-event,other,press-release,reunion,training,travel,vacation

:: Liferay DXP 2026. Habilitar RSS

En la versión Liferay DXP 2026 para habilitar las fuentes de datos RSS debemos seguir los pasos siguientes: 1.- Accederemos a la Configuraci...