bloggers bloggers

Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Marco Napolitano
Messaggi: 78
Stelle: 0
Data: 12/06/20
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Come mostrare i tag di un web content da dentro un template velocity

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! :)

Precedente
Commenti
Aggiungi Commento
Jader Jed Francia
Una nota!
Nella 6.1.1 CE GA2 per poter utilizzare il serviceLocator all'interno dei vostri template velocity dovete aggiungere questa property nel vostro portal-ext.properties:

journal.template.velocity.restricted.variables=

Questo perché, di default, la 6.1.1 valorizza così questa property:

journal.template.velocity.restricted.variables=serviceLocator
Inviato il 09/07/15 14.02.