以编程方式获取 Liferay 页面的 URL

18

我想在一个门户组件中创建一个链接,以便可以导航到liferay门户中的另一个页面。为此,我正在寻找一个API(可以是特定于liferay的),它可以根据页面名称返回其URL(也可以是友好的URL)。

4个回答

12

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

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

而且,一旦您开始使用虚拟主机和友好的群组URL,事情就会发生变化。所以这不是一个好方法。

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


8

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

如果您确实只有页面名称,可以使用LayoutLocalServiceUtil.getLayouts(...)循环遍历所有布局,并检查某些属性(在这种情况下是名称)。


2
据我所知,FriendlyURL不是唯一的。不同组中的两个页面(布局)可以具有相同的友好URL。实际上,它们会有相同的友好URL,因为当您创建新组时,通常会在其中创建带有“/home”友好URL的页面。问题在于页面(布局)的友好URL不包含完整路径(例如“/web/guest/home”,“/web/user/home”),而只包含其中的一部分。 - mvmn

1
在Liferay 6.1.20中,可以使用“将链接门户URL链接到页面”将链接指向您的门户中的另一页。它位于您的门户的“外观”菜单项下。对我来说,这很有效。 祝福。

1

try this one for current url

${themeDisplay.getURLCurrent()}

尝试使用此链接作为门户网址。
${themeDisplay.getPortalURL()}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接