我想在 portlet 中创建一个链接,以便可以导航到 liferay 门户中的不同页面。我命令这样做,我正在寻找一个 API(可以是 liferay 特定的),它给定一个页面名称,将返回它的 url(它也可以是friendlyURL)。
4 回答
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
而不仅仅是布局。
在 Liferay 中访问页面的 API 是 LayoutService。然而,页面名称在 Liferay 中并不是唯一的,而且它们是国际化的。因此,除了名称之外,您还需要一些独特的页面属性来检索其 url。
如果您真的只有页面名称,您可以使用 LayoutLocalServiceUtil.getLayouts(...) 循环所有布局并检查某些属性(在本例中为它的名称)。
至少在 Liferay 6.1.20 中,可以使用“将 Portlet URL 链接到页面”来使链接继续到您门户中的另一个页面。它位于 portlet 的“外观”菜单项下。对我来说,这很好用。
干杯
试试这个当前的网址
${themeDisplay.getURLCurrent()}
试试这个作为门户网址
${themeDisplay.getPortalURL()}