Get it on Google Play
Mas de 21 años en el mundo del IT corporativo

Macros en plantillas ADT de Liferay y el botón de editar contenido

30-10-2019
Plantilla ADT Liferay

Plantilla ADT Liferay

Ya no escribo con tanta asiduidad en el blog como antes, y es que los vídeos me comen mucho tiempo. Espero que los estéis disfrutando tanto como yo.

Hace unos meses escribí un post sobre plantillas ADT que tuvo bastante éxito “Haz tus plantillas Freemarker mas robustas capturando excepciones“. En este artículo explicaba como hacer las plantillas mas robustas para que no nos apareciera una traza de error a la primera de cambio, por ejemplo, si nos faltaba un contenido.

Dominar las plantillas ADT y todo su sistema de gestión de contenidos es super importante en Liferay y hoy vamos a matar dos pájaros de un tiro. Por un lado, una petición que me han hecho hoy, como hacer que aparezca el icono de editar un contenido cuando creamos un plantilla para el portlet “Asset Publisher”, y por otro, ver las macros de Free Marker, que nos ayudan a tener un código mas elegante.

Macro Plantilla ADT Liferay

Macro Plantilla ADT Liferay

Para hacer que nos aparezca el enlace para editar un contenido tendremos, primero, que poner esta macro al final de nuestra plantilla:

<#macro getEditIcon>
    <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())>
        <#assign redirectURL = renderResponse.createRenderURL() />

        ${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")}
        ${redirectURL.setWindowState("pop_up")}

        <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" />

        <#if validator.isNotNull(editPortletURL)>
            <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) />

            <@liferay_ui["icon"]
                cssClass="icon-monospaced visible-interaction"
                icon="pencil"
                markupView="lexicon"
                message=title
                url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});"
            />
        </#if>
    </#if>
</#macro>

Una macro es un trozo de plantilla que se podrá llamar tantas veces como sea necesario. Es como una ‘función’, pero no tiene parámetros y tiene acceso a todas las variables(Puesto que en una plantilla son globales). Para los mas viejos y nostalgicos, son como una subrutina de GWBasic.

A partir de este momento ya podemos llamar a la subrutina desde nuestro bucle, teniendo en cuenta que tendremos que declarar cuatro variables que utiliza nuestra macro, sino daría error:

<#list entries as entry>
    <#assign
        entry = entry
        assetRenderer = entry.getAssetRenderer()
        entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))
        viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent"))
    />
...

De esta manera ya podremos crear plantillas ADT para ‘Asset Publisher’ que nos permitan editar el contenido desde el propio portlet(Eso sí, solo si tenemos permisos).

Si te ha servido, por favor comparte

Interesado en formación Liferay?

 

Leave a Reply