18

我想在 portlet 中创建一个链接,以便可以导航到 liferay 门户中的不同页面。我命令这样做,我正在寻找一个 API(可以是 liferay 特定的),它给定一个页面名称,将返回它的 url(它也可以是friendlyURL)。

4

4 回答 4

12

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

但是,为了构建包含页面 URL 的字符串,您必须连接门户、组和布局本身的友好 URL(即/web/guest/home-web是公共页面的门户 URL,guest默认情况下是访客组的友好 URL,并且home是家庭的友好 URL默认页面/布局)。这可能很棘手,因为您必须检查这是公共页面还是私人页面等。

一旦您开始使用具有友好 URL 的虚拟主机来进行群组,情况就会发生变化。所以这不是一个好方法。

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

于 2012-02-15T12:36:09.593 回答
8

在 Liferay 中访问页面的 API 是 LayoutService。然而,页面名称在 Liferay 中并不是唯一的,而且它们是国际化的。因此,除了名称之外,您还需要一些独特的页面属性来检索其 url。

如果您真的只有页面名称,您可以使用 LayoutLocalServiceUtil.getLayouts(...) 循环所有布局并检查某些属性(在本例中为它的名称)。

于 2011-03-01T15:10:19.900 回答
1

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

干杯

于 2014-07-21T13:27:13.803 回答
1

试试这个当前的网址

${themeDisplay.getURLCurrent()}

试试这个作为门户网址

${themeDisplay.getPortalURL()}
于 2020-05-29T13:48:45.490 回答