29 de septiembre de 2026

:: Liferay. Obtener los usuarios activos desde Groovy


Una solución rápida para obtener la relación de usuarios activos en Liferay 7.4 es por medio de un script en Groovy.


Para ello accederemos a: Panel de control > Administración del servidor > Script

import com.liferay.portal.kernel.service.UserLocalServiceUtil

import com.liferay.portal.kernel.workflow.WorkflowConstants


def users = UserLocalServiceUtil.getUsers(-1, -1).findAll { user ->

    user.status == WorkflowConstants.STATUS_APPROVED && !user.isDefaultUser()

}


println "LISTADO DE USUARIOS ACTIVOS - LIFERAY 7.4"

println "=========================================================================="

println String.format("%-35s | %-20s | %-30s", "NOMBRE COMPLETO", "NOMBRE DE USUARIO", "CORREO ELECTRÓNICO")

println "--------------------------------------------------------------------------"


users.each { user ->

    String fullName = user.getFullName() ?: ""

    String screenName = user.getScreenName() ?: ""

    String emailAddress = user.getEmailAddress() ?: ""


    println String.format("%-35s | %-20s | %-30s", fullName, screenName, emailAddress)

}


println "--------------------------------------------------------------------------"

println "Total de usuarios activos: " + users.size()

19 de agosto de 2026

:: Liferay. Porlet Galería multimedia recuperar carpeta configurada


Desde una plantilla ADT (freemaker), para recuperar la carpeta configurada, el código podría ser similar a este:


<#-- Obtiene Carpeta configurada -->

<#assign rootFolderId = 0 />

<#assign externalCode = (portletPreferences["rootFolderExternalReferenceCode"]?first)!"" />

<#if externalCode?has_content && themeDisplay??>

<#assign folderObj = dlFolderLocalService.getDLFolderByExternalReferenceCode(externalCode, groupId)! />

<#if folderObj??>

<#assign rootFolderId = folderObj.getFolderId() />

</#if>

</#if>


<#assign urlFolderId = paramUtil.getLong(request, "folderId", 0) />

<#if urlFolderId gt 0>

    <#assign folderId = urlFolderId />

<#else>

    <#assign folderId = rootFolderId />

</#if>

<#assign paramFolderId = paramUtil.getLong(request, "${portletNamespace}paramFolderId", getterUtil.getLong(folderId)) />

3 de agosto de 2026

:: Liferay. Script para ir al inicio de la página


En diversos temas de apariencia es necesario contar un enlace que permita al usuario realizar un scroll al inicio de la página.


Este comportamiento podemos hacerlo mediante un script:

AUI().ready(function(A){

window.moveToAnchor = function moveToAnchor(anchorId) {

var coordinateY = A.one(anchorId).getY();

window.scrollTo(0,coordinateY);

}

});

9 de julio de 2026

:: 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ón del Sistema > Contenido web

2.- En el menú lateral izquierdo, seleccionaremos la entrada: "Administración"

3.- Marcaremos el check denominado: "Mostrar fuentes" y pulsaremos el botón: "Guardar"



Tras marcar este check, en la sección del panel nos aparecerá una nueva pestaña denominada: "Fuentes" a través de la que podremos definir aquellos canales que sean necesarios.



La  URL para acceder al canal RSS será: /-/journal/rss/groupId/feedId


23 de junio de 2026

:: Liferay 7.3. Habilitar el modo borrador para los documentos


En Liferay, podemos establecer el modo borrador a la hora de publicar un documento. Para ello, debemos modificar el fichero: "portal-ext.properties" añadiendo la siguiente línea:

dl.file.entry.drafts.enabled=true

2 de junio de 2026

:: Liferay 7.4. Pop-up en página de contenido.


En Liferay 7.4 podemos mostrar mediante un script un pop-up para mostrar, por ejemplo: un aviso. Al tratarse de una página de contenido no podemos hacer uso de AlloyUI.

Para ello iremos a la configuración de la página de contenido y seleccionaremos la entrada: "Diseño" y bajo el epígrafe: "Personalización", seleccionaremos la pestaña: "Javascript".

Tras pulsar el botón "Guardar" este cambio quedará en estado: "Borrador" al tratarse de una página de contenido por lo que tendremos que editarla y pulsar sobre el botón: "Publicar".

Liferay.Util.openWindow({

    title: 'Aviso',

    dialog: {

        centered: true,

        constrain2view: true,

        modal: true,

        resizable: false,

        width: 450,

        height: 250,

        bodyContent: '<span>Lorem ipsum dolor sit amet<br/><br/>Rogamos disculpen las molestias</span>'

    }

});

1 de junio de 2026

:: CookieBot

Al utilizar CookieBot para mostrar el cuadro de diálogo relativo a la política de Cookies, puede ocurrir que al marcar el Check: "Estadísticas" no se carguen las correspondientes a Google Analytics.

Cuando se da este comportamiento, puede ser debido a que en el panel de control de CookieBot estas cookies son identificadas como: Marketing" en lugar de "Estadística".




Una vez categorizadas correctamente estas cookies dentro del panel de CookieBot, el comportamiento será el esperado.


19 de mayo de 2026

:: Liferay. Comprobar la versión


Una forma rápida de comprobar la versión de Liferay que está corriendo en un portal, siempre que tengamos permisos de administrador, consiste en acceder a: "Panel de control > Administración del servidor".

En este punto nos indicará la versión exacta:




15 de mayo de 2026

WCAG 3.1.1 y 3.1.2 sobre el "Idioma de la página" y "Idioma de las partes


Una duda que surge respecto a la accesibilidad, es en páginas como: Política de Cookies, Política de privacidad, ..., si los términos tales como: "Cookies", "Google Analytics", ... deberían ir englobadas dentro de: "<span lang="en"></span> para indicar que se trata de un anglicismo.

La norma dice que se debe marcar un cambio de idioma cuando una palabra o frase del texto se pronuncie de forma totalmente diferente en el idioma de origen y pueda confundir al lector de pantalla de una persona invidente.

En cualquier caso, "Cookies" es una palabra adoptada y de uso común por lo que las herramientas de accesibilidad o un auditor "normalmente" no marcaría esto como un problema de accesibilidad. Además, los nombres propios, las marcas comerciales y los nombres de productos, no requieren ser etiquetados con un idioma diferente.

De esta manera, no sería realizar esta distinción de idioma para estos términos ya que podría llegar a ser contraproducente para el usuario final que utiliza un lector de pantalla, ya que este continuamente estaría cambiando de idioma y podría confundir al usuario.

Es un tema debatido, por lo que podrían existir opiniones distintas sobre este punto concreto.


8 de enero de 2026

:: Liferay 7.4. Habilitar/deshabilitar la vista previa de un documento


En Liferay 7.4 podemos habilitar o deshabilitar la vista previa de un documento en la biblioteca de documentos y multimedia. Se trata de un proceso costoso en recursos (procesamiento y espacio en disco), por lo que en algunas situaciones puede ser recomendable deshabilitar la generación de estas vistas previas.

Podemos llevarlo a cabo a través de la siguiente opción:

1.- Panel de control > Administración del servidor

2.- Configuración del portal

3.- Buscaremos la opción: "dl.file.entry.preview.enabled"

4.- Podremos comprobar el estado de esta propiedad


Para modificar el valor, y no permitir la generación de la vista previa de los documentos, podemos insertar la siguiente línea en el fichero: "portal-ext.properties"

dl.file.entry.preview.enabled=false



:: Liferay 7.4. Eliminar los comentarios en documentos de la Biblioteca


En Liferay 7.4 cuando accedemos a un documento de la biblioteca de documentos y multimedia el usuario logueado puede añadir un comentario o suscribirse para ser notificado cuando un documento se modifica.

Para deshabilitar esta opción podemos hacerlo a través de la siguiente línea en el fichero: "portal-ext.properties"

dl.file.entry.comments.enabled=false

20 de diciembre de 2025

:: CSS. Imagen redonda

 

Para lograr una imagen redonda con CSS los estilos a aplicar son los siguientes:

.box{

   background-color: #fff;

   width: 100px;

   height: 100px;

   border-radius: 50%;

   background-size: cover;

   margin: 0 auto;

   background-image: url('http://static.jsbin.com/images/dave.min.svg');

  }

10 de diciembre de 2025

:: Liferay. Redirección al cerrar sesión


En Liferay 7.4 podemos establecer la página a la que queremos que se redirija al usuario cuando cierra sesión mediante la siguiente propiedad en el fichero: "portal-ext.properties".

default.logout.page.path=/URL_PAGINA

De esta manera, cuando, por ejemplo, a un usuario le caduque la sesión por inactividad, será redirigido a la URL que hayamos indicado.

6 de noviembre de 2025

:: Liferay. Redirección tras el login

Liferay

En Liferay 7.4 para llevar a cabo una redirección tras el login, debemos insertar la siguiente línea en el fichero: "portal-ext.properties".


default.landing.page.path=/URL_DESTINO


5 de noviembre de 2025

:: Tip: Añadir nueva fila en excel

Microsoft Excel

Para añadir una nueva fila en un fichero Excel mediante un atajo de teclado debemos seguir los pasos siguientes:

- Seleccionar la fila bajo la que insertaremos una nueva fila

- En Windows, pulsaremos: "Ctrl +"


11 de abril de 2025

:: Liferay. Mostrar siempre el código de idioma en las URL's


En Liferay 7.3 y, en versiones anteriores, para el idioma por defecto -en las configuraciones habiturales- no se muestra el código de idioma en las URL's. 

Por ejemplo:

- https://www.dominio.com/naturaleza (Idioma por defecto Castellano)

- https://www.dominio.com/en/naturaleza  (Idioma Inglés)


Para forzar que siempre se incluya el código de idioma, debemos modificar la siguiente línea en el fichero: "portal-ext.properties".

locale.prepend.friendly.url.style=2


Tras reiniciar el servicio, nuestras URL's serán del tipo:

- https://www.dominio.com/es/naturaleza


13 de marzo de 2025

:: El principio YAGNI


YAGNI
es el acrónimo de: "You Aren't Gonna Need It" (No lo vas a necesitar) y es uno de los problemas más habituales en los proyectos de software, la sobreingeniería.

Este principio básico del desarrollo ágil, es fácil de enteneder, es decir, sólo deben desarrollarse aquellas funcionalidades estrictamente necesarias, atendiendo a los requistos del software y objetivos del proyecto en cada etapa.

En concepto contrario, que es habitual en el desarrollo de proyectos de software, consiste en desarrollar funcionalidades que realmente no se encuentran dentro del alcance del proyecto, pero que pensamos que pueden ser útiles.

Beneficios de aplicar YAGNI

Al aplicar YAGNI en nuestros proyectos de desarrollo de software nos aportará diversos beneficios:

  • Ahorro de tiempo y recursos, y por lo tanto costes
  • Código más simple
  • Mejora de la mantenibilidad del proyecto
  • Reducción de errores y bugs

Además del principio YAGNI, podemos aplicar otras pautas: KISS, DRY, ...


10 de febrero de 2025

:: Propiedades ACID en transacciones


En el contexto de las transacciones, el acrónimo ACID hace referencia a las 4 propiedades de una transacción: atomicidad, coherencia, aislamiento y durabilidad

Atomicidad

Todo los cambios en los datos se realizan como si fueran una sola operación.

Coherencia

Los datos están en un estado coherente, cuando se inicia y finaliza la transacción.

Aislamiento

El estado intermedio de una transacción no es visible para otras transacciones.

Durabilidad

Después de que una transacción finalice correctamente, los cambios se persisten y no se deshacen, aunque se produzca una anomalía en el sistema.



5 de febrero de 2025

:: Alternativa accesible al subrayado


¿Por qué usar <ins> en lugar de <u>?

La razón principal es la semántica.

<u>: Originalmente, esta etiqueta se utilizaba para indicar que el texto subrayado necesitaba una atención especial. Sin embargo, con el tiempo, se ha usado indiscriminadamente para dar formato al texto, lo que ha diluido su significado original.

<ins>: Esta etiqueta tiene un significado más específico: indica que el texto ha sido insertado en el documento. Es decir, es contenido que se ha añadido posteriormente. Esto proporciona una información contextual valiosa para los lectores y para los motores de búsqueda.


Ventajas de usar <ins>:

Mayor claridad: Indica claramente la intención del autor al formatear el texto.

Mejor accesibilidad: Los lectores de pantalla pueden interpretar esta etiqueta de manera más precisa, mejorando la experiencia de los usuarios con discapacidades visuales.

SEO: Al utilizar etiquetas semánticas, ayudas a los motores de búsqueda a comprender mejor el contenido de tu página, lo que puede mejorar tu posicionamiento en los resultados de búsqueda. 

Ejemplo:

<p>Este es el texto original. <ins>Se ha añadido esta nueva frase.</ins></p>

31 de enero de 2025

:: Liferay 7.4. Desactivar catpcha en Gogo Shell

 


En la versión 7.4 de Liferay se ha incluido una validación mediante captha para realizar algunas operaciones.

Por ejemplo, en la Gogo Shell para ejecutar un comando es necesario insertar la clave solicitada por el captcha, lo que en un entorno de desarrollo puede resultar engorroso.

Es posible deshabilitar el captcha de la siguiente forma:

1.- En el fichero: "portal-ext.properties" insertaremos la siguiente línea:

captcha.enforce.disabled=true


2.- En: "Panel de control > Configuración del sistema > Seguridad > Herramientas de seguridad"

El valor del campo: "Máximo de desafíos debemos" estableceremos el valor: "-1".


3.- Reiniciar el servicio de Liferay para que cargue las nuevas configuraciones


Tras el reinicio del servicio, en la Gogo Shell no nos solicitará el captcha:



:: Liferay. Obtener los usuarios activos desde Groovy

Una solución rápida para obtener la relación de usuarios activos en Liferay 7.4 es por medio de un script en Groovy. Para ello accederemos a...