español - liferay tutorial
Programmáticamente obtener la url de una página en liferay (3)
Quiero crear un enlace en un portlet para poder navegar a una página diferente en el portal de por vida. Para hacer eso, estoy buscando una API (puede ser específica de por vida) que, dado un nombre de página, devolvería su URL (también puede ser friendlyURL).
Al menos en Liferay 6.1.20 se puede usar ''Vincular las URL del portlet a la página'' para hacer que los enlaces se dirijan a otra página de su portal. Se encuentra en el ítem de menú "mirar y sentir" de su portlet. Para mí esto funciona bien.
aclamaciones
La API para acceder a las páginas en Liferay es el LayoutService. Sin embargo, los nombres de página no son únicos en Liferay y, además, están internacionalizados. Así que necesitas alguna propiedad única para que una página recupere su url, además de su nombre.
Si realmente solo tiene el nombre de la página, puede usar LayoutLocalServiceUtil.getLayouts (...) para recorrer todos los diseños y verificar alguna propiedad (en este caso, su nombre).
Las páginas del portal en Liferay se denominan Layouts
en API y tablas de base de datos. Se identifican por el campo plid
, se pueden obtener utilizando LayoutLocalServiceUtil
y las API relacionadas, y también de algunas otras llamadas como themeDisplay.getLayout()
.
Sin embargo, para crear una cadena que contenga la URL en una página, deberá concatenar la URL amigable del portal, el grupo y el diseño en sí (es decir, /web/guest/home
- web
es la URL del portal para las páginas públicas, guest
es la URL amigable del grupo invitado por defecto y el home
es la URL amigable de la página de inicio / diseño por defecto). Esto puede ser complicado, ya que debe verificar si se trata de una página pública o privada, etc.
Y una vez que comienzas a usar hosts virtuales con URLs amigables para grupos, las cosas cambian. Así que esta no es una buena manera.
Para evitar la creación manual de URL y tener las URL que están garantizadas para ser correctas, debe usar com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)
un método estático de PortalUtil
: hará todo el trabajo necesario para tú. Aunque también debe proporcionar ThemeDisplay
y no solo Layout.