获取Liferay中包含Web内容的portlet /页面

时间:2011-12-06 09:27:53

标签: liferay web-content

我正在尝试让Liferay(6.0.6)Asset Publisher在门户网站主页上的多个社区中发布所有更改。通过单击链接,用户应该被重定向到另一个社区并查看新的Web内容。问题是资产发布者的默认行为(即使是从所有社区收集信息的钩子)试图通过搜索当前页面的组(其中内容不是)来获取URL。 我决定更改显示页面的jsp以搜索所有社区中的所有页面,并找到包含具有所需Web内容的portlet的第一个页面。所以

  1. 我如何通过网络内容的期刊ID获取包含网页内容的portlet?
  2. 我怎样才能获得包含portlet的页面?
  3. 由于

2 个答案:

答案 0 :(得分:1)

数据库中的 PortletPreferences 表包含系统中每个portlet的配置。 Web Content Display portlet的articleId配置作为首选项存储在此表中。如果查看该表,则有3个重要的列:

  • plid 包含已删除portlet的布局(=页面)的ID。
  • portletid 包含portlet的实例 ID。对于Web Content Display portlet,此ID的格式为56_INSTANCE_XXXX,其中XXXX是唯一的哈希值。
  • 首选项是XML格式的字符串,包含此portlet的所有首选项及其值。

首选项 XML的示例:

<portlet-preferences>
    <preference><name>group-id</name><value>10139</value></preference>
    <preference><name>article-id</name><value>14295</value></preference>
</portlet-preferences>

所以这只是让你的SQL查询正确的问题。据我所知,没有可以直接致电的服务。

SELECT l.friendlyURL
FROM PortletPreferences p, Layout l
WHERE p.plid=l.plid 
AND p.portletid LIKE '56_INSTANCE_%' 
AND p.preferences LIKE '<preference><name>article-id</name><value>14295</value></preference>';

答案 1 :(得分:0)

如下所示,您可以找到文章呈现的布局。

List<Long> layoutIds = JournalContentSearchLocalServiceUtil.getLayoutIds(groupId, false, articleId);
long layoutId = 0;

if (!layoutIds.isEmpty()) {
  layoutId = layoutIds.get(0).longValue();
  Layout layout = LayoutLocalServiceUtil.getLayout(groupId, false, layoutId);
  String url = PortalUtil.getLayoutURL(layout, themeDisplay);
  ...
}
相关问题