2011-12-06 40 views
1

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

  1. 我怎样才能得到Web内容的日记ID包含Web内容的Portlet?
  2. 如何获取包含portlet的页面?

由于

回答

1

PortletPreferences表在数据库包含系统中每个portlet的配置。 Web内容显示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>'; 
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); 
    ... 
}