Seguro que muchos os habréis dado cuenta de uno de nuestros proyectos y es que en colaboración con el Gabinete de Comunicación de la Universidad de Valladolid hemos creado UVadivulga.
Etiqueta: opencms
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:
OpenCms 9 Release Candidate
Ya está aquí el release de OpenCms 9
Hay muchas novedades y algunos contenidos nuevos, junto con un template muy sencillo, y cosas que echábamos en falta en la 8.5
Leer más
OpenCms no permite mas de 100 elementos en un contenedor
Si intentáis meter más de 100 contenidos en un contenedor mediante ADE veréis que al pasar de 100 al meter uno nuevo el último desaparece.
Esto es así porque en OpenCms lo han decidido, pero siempre podemos tunearlo cambiando el código si somos valientes:
[code]
public static final String DEFAULT_MAX_ELEMENTS = «100»;
[/code]
dentro de org.opencms.jsp.CmsJspTagContainer
aunque la opción más sencilla es definir en el contenedor el parámetro «maxElements» con un número mayor que 100:
[code]
cms:container name=»leftcontainer» type=»column» width=»230″ maxElements=»200″
[/code]
Opencms: Borrar un Locale
Para borrar un locale determinado de una página podemos hacerlo por código de la siguiente manera.
[code]
//Elegimos el locale a borrar
Locale locale=new Locale(«en»);
//Cogemos el recurso
CmsResource r = cmso.readResource(«/prueba.html»);
//Comprobamos que sea un contenido XML
I_CmsResourceType resType = OpenCms.getResourceManager().getResourceType(r.getTypeId());
if (resType instanceof CmsResourceTypeXmlContent) {
//Obtenemos el contenido XML
CmsXmlContent resourceDocument = CmsXmlContentFactory.unmarshal(cmso, cmso.readFile(r));
//Borramos el locale
resourceDocument.removeLocale(locale);
//Establecemos el XML
resourceDocument.getFile().setContents( resourceDocument.marshal() );
//Bloqueamos el recurso
cmso.lockResource( «/prueba.html» );
//Guardamos los cambios
cmso.writeFile(resourceDocument.getFile());
}
[/code]
También podemos de esta forma borrar algún elemento del XML con [code]resourceDocument.removeValue(«ELEMENTO»,locale,0);[/code]
Como siempre, espero que os sirva. Os dejo el código competo de una página JSP que recorre recursivamente buscando los index.html para borrar el locale «en»
[code]
<%@ page contentType=»text/html» pageEncoding=»UTF-8″%>
<%@ page import=»java.util.*» %>
<%@ page import=»java.util.Locale» %>
<%@ page import=»java.text.SimpleDateFormat» %>
<%@ page import=»org.opencms.file.CmsResource» %>
<%@ page import=»org.opencms.file.CmsObject» %>
<%@ page import=»org.opencms.util.CmsUUID» %>
<%@ page import=»org.opencms.util.CmsStringUtil» %>
<%@ page import=»org.opencms.main.*» %>
<%@ page import=»org.opencms.jsp.*» %>
<%@ page import=»org.opencms.file.*» %>
<%@ page import=»org.opencms.file.types.*» %>
<%@ page import=»org.opencms.xml.*» %>
<%@ page import=»org.opencms.xml.content.*» %>
<%@ page import=»org.opencms.xml.types.*» %>
<%@ page import=»org.opencms.lock.*» %>
<%@ page import=»org.opencms.db.CmsResourceState» %>
<%@ page import=»org.opencms.xml.content.CmsXmlContent» %>
<%!
//FUNCION RECURSIVA
@SuppressWarnings({«unchecked»})
static void showFolder(CmsObject cmso,CmsJspActionElement cms, JspWriter out, CmsJspNavBuilder nav, List<CmsJspNavElement> filesInFolder,String folder) throws Exception {
String name;
Locale len=new Locale(«en»);
out.println(«SHOWFOLDER «+folder+»<br>»);
List<CmsJspNavElement> filesInSub;
for (CmsJspNavElement sub : filesInFolder) {
name = sub.getResourceName();
out.println(«RECURSO «+name+»<br>»);
name = sub.getResourceName();
if (!sub.isFolderLink()) {
if (name.endsWith(«.config»)) {
} else {
out.println(name+» ES INDEX «+»<br>»);
CmsResource r = cmso.readResource(sub.getResourceName());
I_CmsResourceType resType = OpenCms.getResourceManager().getResourceType(r.getTypeId());
if (resType instanceof CmsResourceTypeXmlContent) {
try {
CmsXmlContent resourceDocument = CmsXmlContentFactory.unmarshal(cmso, cmso.readFile(r));
resourceDocument.removeLocale(len);
resourceDocument.getFile().setContents( resourceDocument.marshal() );
cmso.lockResource( sub.getResourceName() );
cmso.writeFile(resourceDocument.getFile());
} catch (CmsXmlException e) {
out.println(«ERROR AL BORRAR LOCALE EN «+sub.getResourceName()+»<br>»);
}
}
}
}
if ((!sub.getResourceName().endsWith(«_documentos/»))&&(!sub.getResourceName().endsWith(«_imagenes/»))) {
if (sub.isFolderLink()) {
filesInSub = nav.getNavigationForFolder(sub.getResourceName(),org.opencms.jsp.CmsJspNavBuilder.Visibility.all,org.opencms.file.CmsResourceFilter.ONLY_VISIBLE);
if (filesInSub.size() > 0) {
showFolder(cmso,cms, out, nav, filesInSub,sub.getResourceName());
}
}
}
}
}
%>
<%
Locale les=new Locale(«es»);
Locale len=new Locale(«en»);
Set<String> elementos = new HashSet<String>();
elementos.add(«Containers»);
CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response);
CmsJspNavBuilder nav = cms.getNavigation();
CmsObject cmso = cms.getCmsObject();
showFolder(cmso,cms,out,nav,nav.getNavigationForFolder(«/uva/»),»/uva/»);
List list = cms.getNavigation().getNavigationForFolder(«/uva/»);
Iterator i = list.iterator();
while (i.hasNext()) {
org.opencms.jsp.CmsJspNavElement ne = (org.opencms.jsp.CmsJspNavElement)i.next();
out.println(ne.getResourceName()+»<br>»);
}
%>
[/code]
Saber qué ha hecho un usuario en OpenCms
A veces no basta con consultar los históricos desde el Workplace. En este caso estamos consultando la tabla CMS_LOG para ver que hizo un usuario.
Leer más
Actualización de Opencms 8.5.2
Hemos actualizado el servidor de desarrollo a la 8.5.2 arreglando algunos problemas que teníamos con la 8.5.1
Módulo de optimización de Opencms de Alkacon
Nos hemos puesto a instalar el módulo de Alkacon para la optimización y ofuscación de la web (http://www.alkacon.com/en/modules/downloads/oamp-webopt-2.0.0.html), pero nos hemos encontrado que no funciona.
El motivo está en el código, por ejemplo en com.alkacon.opencms.v8.weboptimization.CmsOptimizationJs.java
[code]
/** Optimized js resource type constant. */
protected static final int RESOURCE_TYPE_JS = 762;
[/code]
pero en el opencms-modules tiene el identificador 282.
La forma de solucionarlo es cambiar los identificadores de los tipos en el opencms-modules.xml para el v8-alkacon-optimized-js, v8-alkacon-optimized-css y v8-alkacon-sprite. Tras el cambio recordad que hay que reiniciar el contexto.
[code]
<resourcetypes>
<type class=»org.opencms.file.types.CmsResourceTypeXmlContent» name=»v8-alkacon-optimized-js» id=»762″>
<properties>
<property>
<name>template-elements</name>
<value type=»shared»><![CDATA[/system/modules/com.alkacon.opencms.v8.weboptimization/pages/optimized-js.jsp]]></value>
</property>
</properties>
<param name=»schema»>/system/modules/com.alkacon.opencms.v8.weboptimization/schemas/optimized-js.xsd</param>
</type>
<type class=»org.opencms.file.types.CmsResourceTypeXmlContent» name=»v8-alkacon-optimized-css» id=»763″>
<properties>
<property>
<name>template-elements</name>
<value type=»shared»><![CDATA[/system/modules/com.alkacon.opencms.v8.weboptimization/pages/optimized-css.jsp]]></value>
</property>
</properties>
<param name=»schema»>/system/modules/com.alkacon.opencms.v8.weboptimization/schemas/optimized-css.xsd</param>
</type>
<type class=»org.opencms.file.types.CmsResourceTypeXmlContent» name=»v8-alkacon-sprite» id=»764″>
<properties>
<property>
<name>template-elements</name>
<value type=»shared»><![CDATA[/system/modules/com.alkacon.opencms.v8.weboptimization/pages/sprite.jsp]]></value>
</property>
</properties>
<param name=»schema»>/system/modules/com.alkacon.opencms.v8.weboptimization/schemas/sprite.xsd</param>
</type>
</resourcetypes>
[/code]
si ya habéis instalado el módulo y tenéis algún contenido con los viejos identificadores, la solución es actualizarlo en la base de datos:
[code]
update CMS_OFFLINE_RESOURCES set RESOURCE_TYPE=762 WHERE RESOURCE_TYPE=282;
update CMS_OFFLINE_RESOURCES set RESOURCE_TYPE=763 WHERE RESOURCE_TYPE=283;
update CMS_OFFLINE_RESOURCES set RESOURCE_TYPE=764 WHERE RESOURCE_TYPE=284;
[/code]
Un saludo
OpenCms en Internet Explorer 10
Para que el OpenCms funcione en ADE con el IE10 y tal y como se indica en la lista hay que meter un meta en las cabeceras de los templates para activar la compatibilidad con IE9, añadiendo:
[code]
[/code]