1

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

  1. 如何通过 web 内容的日志 id 获取包含 web 内容的 portlet?
  2. 如何获取包含 portlet 的页面?

谢谢

4

2 回答 2

1

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

  • plid包含放置 portlet 的布局 (=page) 的 id。
  • portletid包含portlet 的实例ID。对于 Web 内容显示 portlet,此 ID 的格式为 56_INSTANCE_XXXX,其中 XXXX 是唯一的散列。
  • 首选项是此 Portlet 的所有首选项及其值的 XML 格式字符串。

首选项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>';
于 2011-12-08T15:14:12.140 回答
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);
  ...
}
于 2014-12-11T11:02:45.207 回答