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

Importar en Opencms desde el CmsShell

Para importar contenidos tenemos las funciones de CmsShell siguientes:

[code]

importResources (String absoluteFilePath, String importPath)

importResources (String absoluteFilePath, String importPath, boolean KeepPermisions)

importResourcesWithTempProject(StringabsoluteFilePath)

[/code]

La tercera símplemente nos crea un proyecto temporal donde mete los contenidos.

Para importar es muy sencillo. Después de autenticarnos con login y seleccionar el proyecto con setCurrentProject podemos:

[code]

importResources «/tmp/contenidos.zip» «/»

[/code]

Hemos seleccionado sólo el «/» porque cuando hicimos la copia la hicimos con la ruta completa. Esto dependerá de cómo hayamos hecho la exportación del zip con los contenidos.

Exportar una carpeta desde el ChmShell de Opencms

Para exportar una carpeta, por ejemplo para copias de seguridad, sin tener que usar la parte de administración de OpenCms podemos usar un pequeño fichero para el CmsShell

En el fichero lo primero será autenticarnos, luego seleccionar el proyecto y finalmente exportar la carpeta que queramos en un zip

[code]

login «Admin» «admin»

setCurrentProject «Offline»

exportResources «/tmp/copia.zip» «/sites/default/»

[/code]

Si esto lo guardamos en un fichero llamado copia.opencms, podemos llamar al cmsshell y pasarlo como entrada para ejecutarlo

[code]

cmsshell.sh < copia.opencms

[/code]

Obtener usuario y grupo que ha modificado un contenido

Para obtener el usuario que modificó un contenido por última vez  y los grupos a los que pertenece podemos usar dentro de una página jsp de OpenCms (que puede ser un template o una función) el siguiente código:

[code]

<%@page buffer=»none» session=»false» taglibs=»c,cms,fn» %>
<%@ page import=»org.opencms.jsp.*» %>
<%@ page import=»org.opencms.file.*» %>
<%@ page import=»org.opencms.util.*» %>
<%@ page import=»java.util.*» %>

CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response);
CmsJspNavBuilder nav = cms.getNavigation();
String filename = cms.getRequestContext().getUri();
String lm = org.opencms.util.CmsDateUtil.getDateShort(cms.getCmsObject().readFile(filename).getDateLastModified());
CmsResource res=cms.getCmsObject().readFile(filename);
if(lm != null){
out.print(«<div class=\»txtalignright\»>Last Updated: » + lm + «</div>»);
}
if(res != null){
CmsUUID uuid=res.getUserLastModified();
CmsUser user=cms.getCmsObject().readUser(uuid);

out.print(«<div class=\»txtalignright\»>User Last Updated: » + user.getName()+» «+user.getEmail()+ «</div>»);
// out.print(«<div class=\»txtalignright\»>User Last Updated: » + uid + «</div>»);

// Getting the groups of the users
List groups = cms.getCmsObject().getGroupsOfUser(user.getName(),false);
Iterator it= groups.iterator();
while (it.hasNext()) {
CmsGroup cmsGroup = (CmsGroup) it.next();
out.println(«<div class=\»txtalignright\»>GRUPO «+ cmsGroup.getName() + «</div>»);
}
}

[/code]

Error javax.servlet.jsp.JspException: In «parseDate», a parse locale can not be established

Si os sale este error en un fmt:parseDate hay dos soluciones:

1. Incluir el parseLocale en la etiqueta fmt:parseDate:

[code]

<fmt:parseDate .... parseLocale="es_ES"/>

[/code]

2. Definirlo en el web.xml

[code]
<context-param>
  <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
  <param-value>es_ES</param-value>
</context-param>

[/code]
Espero que os sirva!!