留言板
Exibir Conteúdo Web em Outra Página em Outro Portlet
Bruno Mori Barata,修改在7 年前。
Exibir Conteúdo Web em Outra Página em Outro Portlet
New Member 帖子: 18 加入日期: 16-11-9 最近的帖子
Olá, estou usando o Liferay 6.2 e estou tendo problemas para exibir um conteúdo web do portlet "portlet-journal-content-search", em outro portlet "portlet-asset-publisher", em outra página.
Meu maior problema é o fato de eu precisar após realizar minha pesquisa, que o sistema exiba os resultador com um link apontando para as suas respectivas páginas de exibição e para o portlet "portlet-asset-publisher". Cada resultado deverá ter um link gerado dinamicamente, porque cada um terá uma página de exibição diferente.
Eu tentei encontrar no código onde a informação da "página de exibição" de cada conteúdo web está, mas não encontrei.
Eu pensei em usar a tag do Liferay "renderURL" para fazer isso, porém não sei como amarrar meu conteúdo web a ele, e nem como pegar dinamicamente a "pagina de exibição" de cada conteúdo.
Hoje quando eu clico no Link para ser redirecionado para meu conteúdo eu fico na mesma página e meu conteúdo é exibido no portlet "".portlet-journal-content".
O código atual é:
Mas eu preciso ser redirecionado para a página de exibição que está atrelado ao meu conteúdo, e ele precisa ser exibido no portlet ".portlet-asset-publisher".
O código que estou tentando utilizar, porém não está funcionando é:
Alguém tem alguma ideia de como posso fazer isto?
Muito obrigado.
Meu maior problema é o fato de eu precisar após realizar minha pesquisa, que o sistema exiba os resultador com um link apontando para as suas respectivas páginas de exibição e para o portlet "portlet-asset-publisher". Cada resultado deverá ter um link gerado dinamicamente, porque cada um terá uma página de exibição diferente.
Eu tentei encontrar no código onde a informação da "página de exibição" de cada conteúdo web está, mas não encontrei.
Eu pensei em usar a tag do Liferay "renderURL" para fazer isso, porém não sei como amarrar meu conteúdo web a ele, e nem como pegar dinamicamente a "pagina de exibição" de cada conteúdo.
Hoje quando eu clico no Link para ser redirecionado para meu conteúdo eu fico na mesma página e meu conteúdo é exibido no portlet "".portlet-journal-content".
O código atual é:
<%
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>
Mas eu preciso ser redirecionado para a página de exibição que está atrelado ao meu conteúdo, e ele precisa ser exibido no portlet ".portlet-asset-publisher".
O código que estou tentando utilizar, porém não está funcionando é:
<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>
Alguém tem alguma ideia de como posso fazer isto?
Muito obrigado.
Bruno Mori Barata,修改在7 年前。
RE: Exibir Conteúdo Web em Outra Página em Outro Portlet (答复)
New Member 帖子: 18 加入日期: 16-11-9 最近的帖子
Eu consegui, os principais pontos para realizar esta tarefa foram:
1° - Saber que o "layoutUuid" é o Id da página de exibição de um conteúdo web, com isso eu posso pegar informações como PLID, todos os PortletsIds que pertencem àquela página, etc.
2° - Pegando informações certas do "Document" eu consigo criar um "AssetEntry".
Este é o código de como eu peguei as informações da "página de exibição" de um conteúdo web:
Após isso eu criei o "AssetEntry" para pegar o "assetEntryId" e finalmente criar meu link dinâmico, veja:
Todas essas modificações foram em "journal_content_search/article_content.jsp".
Espero que isto ajude muitas pessoas!
1° - Saber que o "layoutUuid" é o Id da página de exibição de um conteúdo web, com isso eu posso pegar informações como PLID, todos os PortletsIds que pertencem àquela página, etc.
2° - Pegando informações certas do "Document" eu consigo criar um "AssetEntry".
Este é o código de como eu peguei as informações da "página de exibição" de um conteúdo web:
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;
}
}
</portlet>
Após isso eu criei o "AssetEntry" para pegar o "assetEntryId" e finalmente criar meu link dinâmico, veja:
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 );
Todas essas modificações foram em "journal_content_search/article_content.jsp".
Espero que isto ajude muitas pessoas!