以编程方式在liferay中获取页面的网址

问题描述 投票:18回答:4

我想在portlet中创建链接,以便可以导航到liferay门户中的其他页面。我要这样做是要寻找一个给定页面名称的API(可能是liferay专用的),该API会返回其url(也可以是friendlyURL)。

liferay liferay-6
4个回答
8
投票

用于访问Liferay中的页面的API是LayoutService。但是,页面名称在Liferay中不是唯一的,而且它们已被国际化。因此,除了名称之外,您还需要页面的一些唯一属性来检索其URL。

如果您确实只有页面名称,则可以使用LayoutLocalServiceUtil.getLayouts(...)遍历所有Layouts并检查某些属性(在本例中为它的名称)。


12
投票

Liferay中的门户页面在API和DB表中确实称为Layouts。它们由plid字段标识,可以使用LayoutLocalServiceUtil和相关API以及从其他一些调用(例如themeDisplay.getLayout())获得。

但是,为了构建包含URL到页面的字符串,您必须连接门户,组和布局本身的友好URL(即/web/guest/home-web是公共页面的门户URL,guest是友好URL来宾组的默认网址,home是主页/布局的友好网址)。这可能很棘手,因为您必须检查这是公共页面还是私有页面,等等。

并且一旦您开始使用带有友好URL的虚拟主机进行分组,情况就会发生变化。因此,这不是一个好方法。

为了避免手动创建URL并确保URL正确,您应该使用com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)静态方法PortalUtil-它会为您完成所有必要的工作。尽管您还需要提供ThemeDisplay,而不仅是布局。


1
投票

至少在Liferay 6.1.20中,可以使用“将Portlet URL链接到页面”来使链接继续到门户网站中的另一页面。它在portlet的“外观”菜单项下。对我来说,这很好。

欢呼声


0
投票

尝试使用此作为当前网址

${themeDisplay.getURLCurrent()}

尝试此作为门户网址

${themeDisplay.getPortalURL()}
© www.soinside.com 2019 - 2024. All rights reserved.