2011-01-27 6 views
18

Desidero creare un collegamento in un portlet in modo che sia possibile accedere a una pagina diversa nel portale liferay. Ho l'ordine di farlo cercando un API (può essere specifico di liferay) che, dato un nome di pagina, restituirebbe il suo URL (può essere anche il friendlyURL).Programmare automaticamente l'URL di una pagina in liferay

risposta

8

L'API per accedere alle pagine in Liferay è il LayoutService. Tuttavia, i nomi delle pagine non sono unici in Liferay e inoltre sono internazionalizzati. Quindi hai bisogno di qualche proprietà unica per una pagina per recuperare il suo URL, oltre al suo nome.

Se si dispone solo del nome della pagina, è possibile utilizzare LayoutLocalServiceUtil.getLayouts (...) per eseguire il loop su tutti i layout e verificare la presenza di alcune proprietà (in questo caso il suo nome).

+0

I nomi non sono univoci, ma la proprietà FriendlyURL è unica. – Jonny

+2

FriendlyURL non è unico AFAIK. Due pagine (layout) in diversi gruppi possono avere lo stesso URL amichevole. In realtà lo faranno, perché quando crei un nuovo gruppo di solito crei una pagina con l'URL "/ home" in esso contenuto. Il fatto è che l'URL amichevole di una pagina (Layout) non contiene il percorso completo (come "/ web/guest/home", "/ web/user/home") ma solo una parte di esso. – mvmn

+4

La combinazione di groupId + friendlyURL è tuttavia unica. –

12

Le pagine del portale in Liferay sono infatti denominate Layouts in API e tabelle DB. Sono identificati dal campo plid, possono essere ottenuti utilizzando LayoutLocalServiceUtil e API correlate e anche da altre chiamate come themeDisplay.getLayout().

Tuttavia al fine di costruire stringa contenente URL di una pagina dovrete concatenare amichevole URL del portale, il gruppo e il layout stesso (cioè /web/guest/home-web è URL portale per le pagine pubbliche, guest è amichevole URL del gruppo guest l'impostazione predefinita e home è un URL descrittivo di home page/layout per impostazione predefinita). Questo può essere complicato, in quanto devi verificare se si tratta di una pagina pubblica o privata, ecc.

E una volta che inizi a utilizzare gli host virtuali con URL amichevoli per i gruppi, le cose cambiano. Quindi questo non è un buon modo.

Per evitare manualmente la creazione di URL e hanno gli URL che sono garantiti per essere corretti si dovrebbe utilizzare com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay) un metodo statico di PortalUtil - si farà tutto il lavoro necessario per voi. Anche se è necessario fornire anche ThemeDisplay e non solo Layout.

1

Almeno in Liferay 6.1.20 si può usare 'Link Portlet URL to Page' per fare in modo che i collegamenti procedano verso una pagina antoher nel proprio portale. È sotto la voce di menu 'guarda e senti' del tuo portlet. Per me questo funziona bene.

evviva