Detectar en opencms cuando en un containerpage estoy cargando un detail

La situaci贸n que se describe a continuaci贸n est谩 probada para las versiones 8 y 9 del opencms.

Recientemente hemos tenido un problema que consist铆a en extraer propiedades de un CmsResource a partir de la uri, para ello se puede insertar 聽sin problema en el template un peque帽o script el cual partiendo de la聽uri desde la que es invocado聽obtenga un objeto CmsResource y a partir de este su CmsUUID etc… esto puede conseguirse de forma sencilla como sigue:

...
String uri = 聽cms.getRequestContext().getUri();
/* Read resource via the site path */
CmsResource resourceViaPath = cmso.readResource(uri);
/* Get the resource ID */
CmsUUID rid = resourceViaPath.getResourceId();
...

Pero…驴que pasa cuando estamos invocando a un contenedor para mostrar una detail page? en este caso queremos obtener las propiedades del tipo que estamos cargando en el contenedor pero 聽con el c贸digo anterior el CmsResource que obtenemos se refiere erroneamente al contendor, despu茅s de valorar extra帽os artificios, la soluci贸n es sencilla, basta con bucear un poco en la API Opencms donde encontramos la clase: 聽org.opencms.ade.detailpage.CmsDetailPageResourceHandler.

Esta clase es muy interesante ya que permite detectar cuando un container est谩 siendo utilizado para mostrar un detail page y en ese caso obtener el CmsResource del detail concreto.

Esta ser铆a la API de la clase CmsDetailPageResourceHandler…

Captura de pantalla 2015-06-19 a las 11.53.16

 

A la vista de los m茅todos anteriores, solo nos queda detectar cuando el container se est谩 empleando para mostrar una detail page, y en ese caso cambiar nuestro CmsResource objetivo para consultarle las propiedades…

...
CmsDetailPageResourceHandler.getDetailId(request)

if (CmsDetailPageResourceHandler.getDetailId(request)!=null){
r = cmso.readResource(CmsDetailPageResourceHandler.getDetailId(request));
}
...

Una vez obtenido el CmsResource apropiado la recuperaci贸n de propiedades es sencilla y podr铆a hacerse mediante este c贸digo:

...
list = cmso.readPropertyObjects(r, true);
i = list.iterator();
CmsProperty prop = null;

while (i.hasNext()) {
prop = (CmsProperty)i.next();
out.println(prop.getName() + " :=" + prop.getValue() );
}
...

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

Este sitio usa Akismet para reducir el spam. Aprende c贸mo se procesan los datos de tus comentarios.