我想在portlet中创建一个链接,以便我可以导航到liferay门户中的另一个页面。我命令这样做我正在寻找一个给定页面名称的API(可以是liferay特定的),它会返回它的url(它也可以是friendlyURL)。
答案 0 :(得分:12)
Liferay中的Portal页面在API和DB表中确实称为Layouts
。它们由plid
字段标识,可以使用LayoutLocalServiceUtil
和相关API以及themeDisplay.getLayout()
等其他调用获取。
但是,为了构建包含页面URL的String,您必须连接门户网站,组和布局本身的友好URL(即/web/guest/home
- web
是公共页面的门户URL,{默认情况下,{1}}是来宾组的友好URL,默认情况下,guest
是主页/布局的友好URL。这可能很棘手,因为您必须检查这是公共页面还是私人页面等。
一旦您开始使用具有友好URL的虚拟主机,组就会发生变化。所以这不是一个好方法。
为避免手动创建网址并确保网址保证正确,您应使用home
com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)
的静态方法 - 它将为您完成所有必要的工作。虽然您还需要提供PortalUtil
而不仅仅是布局。
答案 1 :(得分:8)
在Liferay中访问页面的API是LayoutService。但是,页面名称在Liferay中并不是唯一的,而且它们是国际化的。因此,除了名称之外,您还需要页面的一些唯一属性来检索其URL。
如果您真的只有页面名称,可以使用LayoutLocalServiceUtil.getLayouts(...)循环遍历所有布局并检查某些属性(在本例中为其名称)。
答案 2 :(得分:1)
至少在Liferay 6.1.20中,可以使用“链接Portlet URL到页面”使链接进入门户网站的其他页面。它位于portlet的“look and feel”菜单项下。对我来说这很好。
欢呼答案 3 :(得分:1)
尝试使用这个作为当前网址
${themeDisplay.getURLCurrent()}
尝试这个作为门户网址
${themeDisplay.getPortalURL()}