27 januari 2017
1 april 2026
Leestijd 3 min
Liferay Freemarker Tips en Tricks: Datum & Tijdstip
<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Liferay Freemarker Tips en Tricks: Datum & Tijdstip</span>
Share this via:

Ik werk al een tijdje met Liferay, maar ik moet bekennen dat ik nog steeds niet echt de overstap heb gemaakt van Velocity naar Freemarker voor mijn templates. Ook al weet ik dat er veel voordelen zitten aan het gebruik van Freemarker, zoals betere foutmeldingen, de Velocity kennis en bibliotheek met snippets die ik door de jaren heen heb opgebouwd is moeilijk op te geven. Maar met de komst van Liferay DXP lijkt het nu de perfecte tijd om over te stappen.

Terwijl ik vandaag werkte aan een probleem, waarbij de wijzigingsdatum van een asset niet werd bijgewerkt bij het uitchecken/inklikken van een nieuwe versie, moest ik iets veranderen in een weergavesjabloon van Freemarker dat werd gebruikt om een lijst met documenten weer te geven. In eerste instantie, voordat ik wist dat er een probleem was in Liferay, dacht ik dat het probleem was dat de template de timeZoneniet doorgaf aan de dateUtil aanroep in de template:

<ul> <#list entries as entry> <#assign dateFormat = "MMM d, HH':'mm" /> <li>${entry.getTitle()} - ${dateUtil.getDate(entry.getModifiedDate(), dateFormat, locale)}</li> </#list> </ul>

Dit leek dus het perfecte moment om te kijken hoe ik dit kon oplossen en of er verbeteringen mogelijk waren. Ik begon met het maken van de regel zoals hij was en voegde alleen detimeZone toe ( die al aanwezig is in de sjablooncontext - ziecom.liferay.portal.template.TemplateContextHelper).

<ul> <#list entries as entry> <#assign dateFormat = "MMM d, HH':'mm" /> <li>${entry.getTitle()} - ${dateUtil.getDate(entry.getModifiedDate(), dateFormat, locale, timeZone)}</li> </#list> </ul>

Hoewel deze oplossing de truc doet en de juiste datetime produceert in de tijdzone die we willen, zag het er een beetje omslachtig uit. Dus vroeg ik me af of Freemarker wat dingen had die het korter/zoeter/beter zouden kunnen maken. Na wat rondgekeken te hebben, vond ik deze 2 dingen:ingebouwde datumopmaak en verwerkingsinstellingen.

De eerste zou ons in staat stellen om dedateUtil te laten vallen, maar lijkt geen regeling te hebben voor het opgeven van eenlocale en/of tijdzone. Dit is waar het tweede artikel om de hoek komt kijken. Met deze verwerkingsinstellingen kunnen we een aantal dingen instellen waar de verdere verwerking van Freemarker rekening mee houdt en gelukkig voor ons is datetime een van die dingen. Dus met de combinatie van beide wordt onssjabloon:

<#setting time_zone=timeZone.ID> <#setting locale=locale.toString()> <#setting datetime_format="MMM d, HH':'mm"> <ul> <#list entries as entry> <li><li>${entry.title} - ${entry.modifiedDate?datetime}</li></li> </#list> </ul>

Nu zie je dat we de processor vooraf kunnen instellen om de Liferay tijdzone en locale te gebruiken, maar ook het door ons gekozendatetime formaat. Hierdoor kunnen we direct de Freemarker?datetime functie gebruiken op het datumveld van de asset invoer. Dit geldt ook voor alle andere datums die u in deze sjabloon wilt afdrukken met?datetime ( of?date of ?time). Omdat het alleen van toepassing is op één procesgang, kunt u verschillende sjablonen, die deze procesinstellingen verschillend instellen, op dezelfde pagina hebben zonder dat ze elkaar storen. De volgende schermafbeelding toont de bovenstaande sjabloon en dezelfde sjabloon waarin de tijdzone, locale en datetime-indeling anders zijn ingesteld:

liferay asset publisher

De schoonheid en het gebruiksgemak van deze kleine verbetering heeft me al van gedachten doen veranderen en hopelijk kan ik in de toekomst meer Freemarker gerelateerde blogposts schrijven.

meme liferay freemarker


Dorien Jorissen
Dorien Jorissen
CMO, ACA Group
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas