2011-12-06 45 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); 
    ... 
}