bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
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

URL parlanti anche quando linkiamo dal CMS

Spesso utilizzando le strutture per i web content di Liferay utilizziamo il tipo "Link a pagina": questo speciale tipo di dato permette al contributore, in fase di data entry, di selezionare da un comodo select box una pagina del sito, senza doverne mettere a mano il nome o altro.

All'interno del template di rendering del contenuto, poi, stampiamo il valore che il campo contiene ma il link che viene generato mostra solamente l'id della pagina e non il friendly url.


Lato Liferay, questo è poco male: il sistema, infatti, è in grado autonomamente di riconoscere l'indirizzo e di caricare la pagina relativa all'id, senza "turbare" la user experience del navigatore.

Peccato che i nostri amici della SEO poi vengono da noi e si lamentano che le pagine non hanno il nome parlante!

Quindi? Che fare??

Beh, un po' di velocity e tutto si sistema!

Ecco qui un bello snippet già pronto all'uso che, dato l'id della pagina letto dal campo contribuito in fase di data entry è in grado di generare il link usando la friendlyUrl:

#set ($service =

$serviceLocator.findService(

"com.liferay.portal.service.LayoutLocalService"))

#set ($myGroup = $getterUtil.getLong($groupId))

#set ($myLayoutId = $getterUtil.getLong($Linkpagina.getData()))

#set ($myLayout = $service.getLayout($myGroup, false, $myLayoutId))

<a href="$myLayout.getFriendlyURL()"><h2>$titolo.getData()</h2></a>

Che cosa ne pensate?
Facile, no? :)

Un'ultima raccomandazione, però: per poter utilizzare la variabile $serviceLocator dentro al vostro template velocity dovete prima valorizzare a stringa vuota questa property dentro al vostro portal-ext.properties:

journal.template.velocity.restricted.variables

Questo perché, di default, è valorizzata così:

journal.template.velocity.restricted.variables=serviceLocator

quindi la variabile viene inibita all'interno dei vostri template!

Alla prossima! :)

Precedente
Commenti
Nessun commento. Vuoi essere il primo.