Foros de discusión

Exibir Conteúdo Web em Outra Página em Outro Portlet

thumbnail
Bruno Mori Barata, modificado hace 7 años.

Exibir Conteúdo Web em Outra Página em Outro Portlet

New Member Mensajes: 18 Fecha de incorporación: 9/11/16 Mensajes recientes
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 é:


 <%
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() %>">&lt;%= StringUtil.shorten(webContentPortletURL.toString(), 100) %&gt;</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 />
 
  &lt;%
             String portletId = PortletKeys.ASSET_PUBLISHER;
             long otherPlid = PortalUtil.getPlidFromPortletId(themeDisplay.getScopeGroupId(), portletId);
  %&gt;
         
 <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 %>">&lt;%= StringUtil.shorten(testURL.toString(), 100) %&gt;</a>


Alguém tem alguma ideia de como posso fazer isto?

Muito obrigado.
thumbnail
Bruno Mori Barata, modificado hace 7 años.

RE: Exibir Conteúdo Web em Outra Página em Outro Portlet (Respuesta)

New Member Mensajes: 18 Fecha de incorporación: 9/11/16 Mensajes recientes
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:

 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!