我正在使用Liferay 6.2,而且我很难在另一个portlet“portlet-asset-publisher”中显示“portlet-journal-content-search”的网页内容,该内容保留在另一个页面中。
我更大的困难是,我需要在搜索网页内容之后,系统显示所有结果,其中包含用于“显示页面”的链接,以及portlet“portlet-asset-publisher”。每个结果都必须动态生成一个链接,因为每个结果都有一个不同的“显示页面”。
我试图在代码中找到有关网页内容“显示页面”的信息,但我没有找到它。
我以为我会使用Liferay标签“renderURL”来做这件事,但我不知道我将如何发送我的内容以及如何动态获取“显示页面”!
今天当我点击要重定向到我的内容的链接时,我会转到相同的页面和portlet“.portlet-journal-content”。 代码如下:
<%
PortletURL webContentPortletURL = PortletURLFactoryUtil.create(request, targetPortletId, plid, PortletRequest.RENDER_PHASE);
webContentPortletURL.setParameter("struts_action", "/journal_content/view");
webContentPortletURL.setParameter("groupId",
String.valueOf(articleGroupId));
webContentPortletURL.setParameter("articleId", articleId);
%>
<br />
<a href="<%= webContentPortletURL.toString() %>"><%= StringUtil.shorten(webContentPortletURL.toString(), 100) %></a>
但我需要重定向到我的内容的“显示页面”(ScreenShot页面的“TestandoPagina”名称),并且必须在portlet“.portlet-asset-publisher”上显示。 我试图做的代码,但它不起作用,是:
<portlet:defineObjects />
<liferay-theme:defineObjects />
<%
String portletId = PortletKeys.ASSET_PUBLISHER;
long otherPlid = PortalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), portletId);
%>
<liferay-portlet:renderURL var="testURL" plid="<%=otherPlid%>" portletName="<%=portletId%>">
<liferay-portlet:param name="groupId" value="<%= String.valueOf(articleGroupId) %>" />
<liferay-portlet:param name="articleId" value="<%= articleId %>" />
</liferay-portlet:renderURL>
<br /><a href="<%= testURL %>"><%= StringUtil.shorten(testURL.toString(), 100) %></a>
有人可以帮助我吗? 非常感谢你。
以下是“如何使用”的截图:
A Web Content example with his "Display Page" called "TestandoPagina"
然后我在“.portlet-journal-content-search”搜索网页内容。
The result of my research with the "wrong" Links
当我今天点击此链接时会发生什么,我保持在同一页面“Processos”,我的内容显示在“.portlet-journal-content”,我想去他的“显示页面”,在此示例名为“TestandoPagina”,内容显示在“.portlet-asset-publisher”。
答案 0 :(得分:0)
我做到了!
这样做的要点是:
1st - 知道“layoutUuid”是Web内容“显示页面”的ID,因此我可以获得PLID,属于该页面的所有PortletIds等信息。
第二 - 获取“文档”的信息我可以创建一个“AssetEntry”。
这是我获取“显示页面”信息的方式:
<%
ResultRow row = (ResultRow) request.getAttribute(WebKeys.SEARCH_CONTAINER_RESULT_ROW);
Object[] objArray = (Object[])row.getObject();
Document doc = (Document)objArray[1];
String layoutUuid = doc.get("layoutUuid");
Layout specificLayout = LayoutLocalServiceUtil.getLayoutByUuidAndCompanyId( layoutUuid, PortalUtil.getDefaultCompanyId() );
specificPlid = specificLayout.getPlid();
articleLayoutTypePortlet = (LayoutTypePortlet) specificLayout.getLayoutType();
List<Portlet> allPortlets = articleLayoutTypePortlet.getAllPortlets();
for (Portlet portlet : allPortlets){
if ( PortletKeys.ASSET_PUBLISHER.equals( portlet .getRootPortletId() ) ) {
portletId = PortletKeys.ASSET_PUBLISHER + PortletConstants.INSTANCE_SEPARATOR + portlet .getInstanceId();
break;
}
}
%>
之后,我创建AssetEntry以获取“assetEntryId”,然后最终创建dinnamic链接:
<%
String className = doc.get("entryClassName");
Long classPk = Long.parseLong( doc.get("entryClassPK") );
AssetEntry assetEntry = AssetEntryLocalServiceUtil.getEntry(className, classPk);
Long assetEntryId = assetEntry.getEntryId();
webContentPortletURL = PortletURLFactoryUtil.create(request, portletId, specificPlid, PortletRequest.RENDER_PHASE);
webContentPortletURL.setParameter( "struts_action", "/asset_publisher/view_content" );
webContentPortletURL.setParameter( "groupId", String.valueOf(articleGroupId) );
webContentPortletURL.setParameter( "type", "content" );
webContentPortletURL.setParameter( "assetEntryId", String.valueOf(assetEntryId) );
webContentPortletURL.setParameter( "articleId", articleId );
%>
我在“journal_content_search / article_content.jsp”所做的所有更改
我希望这可以帮助很多人!