Get it on Google Play

Liferay, programando con los contenidos

22-12-2010
 

Ya hablé sobre el potente sistema de gestión de contenidos de Liferay en el articulo “Tipos de contenidos y multidioma en Liferay”. En resumen, disponemos de todo un sistema de contenidos con estructuras de datos, plantillas, tags, categorías, etc y multi-idioma funcionando.

Además disponemos de un API Java para acceder al motor de contenidos, de esta manera, resulta fácil desarrollar portlets ‘elegantes’ integrados dentro de Liferay.

En el siguiente ejemplo hacemos una petición al API para que nos devuelva un listado de ‘Assets’. Recorremos el listado y tratamos los que sean del tipo ‘JournalArticle’, concretamente leemos el contenido:


<%@ page import="com.liferay.portlet.asset.model.AssetEntry" %>
<%@ page import="com.liferay.portlet.asset.model.AssetCategory" %>
<%@ page import="com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil" %>
<%@ page import="com.liferay.portlet.journal.model.JournalArticle" %>

<%@ page import="java.util.List" %>

List<AssetEntry> allAsset = AssetEntryLocalServiceUtil.getAssetEntries( 0, AssetEntryLocalServiceUtil.getAssetEntriesCount() );

for ( int i=allAsset.size()-1; i>=0; i-- ) {
   AssetEntry asset=(AssetEntry) allAsset.get(i);
   List<AssetCategory> lcat=asset.getCategories(); /* Leemos las categorias */

   if ( asset.getClassName().equals("com.liferay.portlet.journal.model.JournalArticle") ) {
     JournalArticle ja=JournalArticleLocalServiceUtil.getLatestArticle( asset.getClassPK() );
     String content=JournalArticleLocalServiceUtil.getArticleContent(ja.getGroupId(), ja.getArticleId(), "view", ""+themeDisplay.getLocale(), themeDisplay);
     ....
     }
   }

Queda a la elección de cada uno adaptarlo a sus necesidades. El hecho de hacer uso del API permite crear Portlets mucho mas ‘elegantes'(fáciles de entender, modificar, gestionar, …) y adaptables a las diferentes instalaciones de Liferay.

Interesado en formación Liferay?

 

Comments

6 Responses to “Liferay, programando con los contenidos”
  1. felix28 says:

    Ayuda po rfavor:
    tengo una plantilla con su estructura asociada;
    quiero tener acceso al nombre de la plantilla o el nombre de la estructura; con journal solo veo la opcion de tener acceso al id de la plantilla y al id de la estructura.

  2. Hola Felix,

    No se muy bien que intentas hacer, pero si ya tienes los ID de estructura y plantilla puedes usar el API de Liferay, concretamente las clases JournalStructureLocalServiceUtil y JournalTemplateLocalServiceUtil para obtener los nombres.

    Saludos,

  3. hypnos says:

    thank you for the solution,

    this one works very well. I noticed that the parameters viewMode and languageId were necessary, otherwise a nullpointer is generated.

    my code:

    ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    try {
    return JournalArticleLocalServiceUtil.getArticleContent(themeDisplay.getScopeGroupId(), articleId, “view”, themeDisplay.getLocale().toString(), themeDisplay);
    } catch (PortalException e) {
    e.printStackTrace();
    return null;
    } catch (SystemException e) {
    e.printStackTrace();
    return null;
    }

  4. Hi Arnaud,

    Thanks for your post Arnaud, my code was for an old Liferay version.

    Thanks,

  5. Jorge says:

    Hola Albert,
    Estoy iniciando el desarrollo con Liferay y el ejemplo que explicas se adapta bastante a lo que quiero hacer. Resulta que he creado una nueva estructura llamada “Aviso” y a partir de ella he agregado varios contenidos . Mi problema está en cómo acceder unicamente a los contenidos creados con esa estructura ? Si pudieras decirme como hago o algún ejemplo que me pueda servir..
    Saludos y gracias de antemano

  6. Hola Jorge,

    Prueba a mirarte este otro articulo, con SearchEngineUtil puedes hacer búsquedas por estructura, template y un montón de campos http://www.albertcoronado.com/2015/02/16/buscando-contenidos-en-liferay-con-searchengineutil/.

    Saludos,

Leave a Reply