Hoy os contamos cómo insertar un contenido web en un tema de apariencia (theme) de Liferay 7 o DXP, referenciándolo por el id del contenido o por su título, concretamente por su “url title”. Lo haremos en lenguaje freemarker, ya que el propio Liferay ya nos desaconseja utilizar velocity por ser un lenguaje obsoleto (deprecated).
Hay que matizar que en estos ejemplos el contenido web se insertará sin portlet de webcontent que lo contenga, por lo que se mostrará únicamente el HTML relacionado con el propio contenido.
En primer lugar tendremos que recoger el servicio Journal Article para poder encontrar los artículos que deseemos mostrar.
<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/>
Una vez recogido el servicio en la variable “journalArticleLocalService” tenemos dos opciones, buscar un contenido del que conocemos su id, o bien un artículo del que conocemos su url title, que se trata simplemente de transformar su título pasando todas sus letras a minúsculas (sin acentos) y los espacios se transforman en guiones altos “-” (ej: “Título de mi contenido” tendría como url title titulo-de-mi-contenido)
Vemos primero la opción de recoger el contenido por id
<#-- Mediante un attemp controlamos la posible excepción que se daría si no existe el id. Si no existe, hacemos que la variable valga vacío para luego controlarlo -->
<#-- group_id es una variable que ya está declarada por defecto en el tema (init.ftl) y referencia al site actual. Si el artículo se encontrase en otro site deberíamos poner el correspondiente -->
<#attempt>
<#assign myArticle = journalArticleLocalService.fetchArticle(group_id, "34004")/>
<#recover>
<#assign myArticle = ""/>
< /#attempt>
<#-- Controlamos que hemos recogido algún contenido para mostrarlo. La variable locale hará que si el contenido está internacionalizado se muestre en el idioma actual -->
<#if myArticle !="">
${journalArticleLocalService.getArticleContent(myArticle, myArticle.getDDMTemplateKey(), "VIEW", locale, themeDisplay)}
< /#if>
Ahora vamos con la opción de recoger el contenido por título
<#-- Mediante un attemp controlamos la posible excepción que se daría si no existe el id. Si no existe, hacemos que la variable valga vacío para luego controlarlo -->
<#-- group_id es una variable que ya está declarada por defecto en el tema (init.ftl) y referencia al site actual. Si el artículo se encontrase en otro site deberíamos poner el correspondiente -->
<#attempt>
<#assign myArticle = journalArticleLocalService.getArticleByUrlTitle(group_id, "titulo-de-mi-contenido")/>
<#recover>
<#assign myArticle = ""/>
< /#attempt>
<#if myArticle !="">
${journalArticleLocalService.getArticleContent(myArticle, myArticle.getDDMTemplateKey(), "VIEW", locale, themeDisplay)}
< /#if>
Con estas pocas líneas de código podremos insertar todos los contenidos web que sean necesarios en nuestro tema de apariencia (theme) de Liferay 7 o DXP