Ciao a tutti!
La scorsa settimana, mentre stavo tenendo un corso su Liferay ad alcuni amici, siamo incappati in un caso d'uso che necessitava di mostrare, all'interno di un template di velocity, i tag collegati ad un contenuto realizzato con il CMS interno di Liferay (il Journal, appunto! :)).
Dopo aver combattuto un po' siamo riusciti a realizzare il caso; ho pensato quindi di postare qui la soluzione a beneficio di tutti! :)
Questo il codice:
#set ($tagsService =
$serviceLocator.findService(
"com.liferay.portlet.asset.service.AssetTagLocalService"))
#set ($journalArticleResourceService =
$serviceLocator.findService(
"com.liferay.portlet.journal.service.JournalArticleResourceLocalService"))
#set ($longGroupId = $getterUtil.getLong($groupId))
#set ($articleResourcePK =
$journalArticleResourceService.getArticleResourcePrimKey(
$longGroupId, $reserved-article-id.data))
#set ($tagsEntries =
$tagsService.getTags(
"com.liferay.portlet.journal.model.JournalArticle", $articleResourcePK))
Tags:
#foreach ($entry in $tagsEntries)
#set ($tag = $entry.getName())
#if ($velocityCount != 1), #end
$tag#end
E ora un po' di spiegazioni! ;)
Se andate a vedere nel codice dei sorgenti di portale la classecom.liferay.portal.velocity.VelocityVariablesImpl
potete vedere tutte le variabili che LR vi passa dentro al template.
Quella che a noi interessa di più è quella che viene passata con la chiave "serviceLocator"
.
Questo oggetto, infatti, ci permette, attraverso un meccanismo interno a LR, di ottenere, sempre dentro al nostro template velocity, istanze di oggetti Service di LR.
Una volta ottenuti quelli che ci servono, poi, possiamo comodamente invocarne i metodi come faremmo in una classe java o in un file JSP.
Spero d'esservi stato d'aiuto!
Se avete dubbi e/o problemi non esitate a chiedere nei commenti qui sotto! :)
Alla prossima! :)
P.S. Abbiamo pubblicato la pagina del corso su Linkedin; se sei stato nostro cliente scrivici una recensione! :)