This website uses cookies to ensure you get the best experience. Learn More.
Criando um ADT que acesse a estrutura de um Web Content
Antes de começar, quero avisá-los que colocarei o nome em inglês do portlets para facilitar o entendimento do artigo.
Como na maioria dos portais de notícias você precisa de uma estrutura diferente da estrutura padrão do Liferay para publicar de forma mais simples e com mais informações as notícias.
Apenas como exemplo, vamos criar uma estrutura com Titulo, SubTitulo e Conteúdo e vamos criar um Application Display Template que exibe as notícias de forma personalizada. A forma personalizada será a lista de notícias com título, sub titulo e link para ler a notícia completa.
O Application Display Template (ADT) para o Asset Publisher é a solução.
Vamos ao código que acessa a estrutura de um Web Content para montar o que foi pedido acima.
#if (!$entries.isEmpty()) #foreach ($entry in $entries) #set($renderer = $entry.getAssetRenderer() ) #set($className = $renderer.getClassName() ) #if( $className == "com.liferay.portlet.journal.model.JournalArticle" ) #set( $journalArticle = $renderer.getArticle() ) #set( $document = $saxReaderUtil.read($journalArticle.getContent()) ) #set( $rootElement = $document.getRootElement() ) ## primeira forma de fazer #foreach( $dynamicElement in $rootElement.elements() ) #if( "subTitulo" == $dynamicElement.attributeValue("name") ) #set( $subTitulo1 = $dynamicElement.element("dynamic-content").getText() ) primeira forma -> $subTitulo1 <br /> #end #end ## segunda forma de fazer #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='subTitulo']") ) #set( $subTitulo2 = $xPathSelector.selectSingleNode($rootElement).getStringValue() ) segunda forma -> $subTitulo2 <br /> #end #end #end
No código acima mostramos duas formas de acessar o conteudo da estrutura.
Fica a seu criterio qual utilizar. Uma melhoria que você poderia fazer para o código acima, seria verificar se o WebContent (JournalArticle) é do tipo de estrutura que você criou. Para o meu caso eu sei que só tenho um tipo, por isso não fiz essa checagem.
Vamos ao código final que mostra o Título, Sub Titulo e Link para a notícia.
#if (!$entries.isEmpty()) <div class="noticias"> #foreach ($entry in $entries) #set($renderer = $entry.getAssetRenderer() ) #set($className = $renderer.getClassName() ) #if( $className == "com.liferay.portlet.journal.model.JournalArticle" ) #set( $journalArticle = $renderer.getArticle() ) #set( $document = $saxReaderUtil.read($journalArticle.getContent()) ) #set( $rootElement = $document.getRootElement() ) #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='subTitulo']") ) #set( $subTitulo = $xPathSelector.selectSingleNode($rootElement).getStringValue() ) #set( $link = $renderer.getURLViewInContext($renderRequest, $renderResponse, '') ) <div class="noticia"> <h1 class="titulo">$entry.getTitle($locale)</h1> <h3 class="sub-titulo">$subTitulo</h3> <p class="leia-mais"> <a href="$link">Leia Mais</a> </p> </div> #end #end </div> #end
Com isso você consegue exibir os dados da estrutura do Web Content.
Espero que isso seja útil para vocês.
ADT é uma nova forma de criar modos de exibição personalizados para alguns recursos do Liferay.
Para saber mais informações sobre o ADT, sugiro dar uma lida nesses artigos aqui:
https://www.liferay.com/pt/web/eduardo.garcia/blog/-/blogs/new-ways-of-customization-with-application-display-templates-part-i-
https://www.liferay.com/pt/web/eduardo.garcia/blog/-/blogs/new-ways-of-customization-with-application-display-templates-part-ii-