Es habitual que en nuestros proyectos sobre el gestor documental Alfresco nos soliciten que este se muestre en un determinado idioma. Normalmente en función del que esté configurado en el equipo de cliente, a nivel de sistema operativo o navegador, debería detectarlo, pero previamente debemos instalar el idioma requerido en el servidor.
Por ejemplo, si nuestro caso es que Alfresco debería aparecer en catalán, los pasos a seguir serían los siguientes:
.- Acceder a la siguiente url para descargar los paquetes de idiomas disponibles:
http://alf-trans.ossportal.org/
.- En nuestro caso, descargaremos los ficheros "alfresco-ca.jar" y "share-ca.jar"
.- Copiaremos los ficheros en la carpeta "${alfresco}/tomcat/shared/lib", siendo ${alfresco} la ruta donde lo tengamos instalado
.- Reiniciaremos el servicio de Alfresco para que los cambios sean efectivos
Podemos comprobar el correcto funcionamiento si configuramos nuestro navegador (en el caso de que no lo tengamos) al idioma catalán.
25 de mayo de 2016
22 de mayo de 2016
:: Alfresco. Creación de tipos de datos personalizados
Es habitual tener que crear tipos personalizados o extender el modelo de datos de Alfresco.
Para llevar a cabo la definición de estos tipos de datos, los pasos a seguir son los siguientes:
.- Definición de un tipo datos al que llamaremos "factura". Crearemos el fichero "facturaModel.xml" en la siguiente ubicación: "${alfresco}/tomcat/shared/classes/alfresco/extension/" o bien podemos crear una carpeta más "myModel" dentro de la que ubicaremos este fichero.
<?xml version="1.0" encoding="UTF-8"?>
<model name="fact:FacturaModel"
xmlns="http://www.alfresco.org/model/dictionary/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<description>Facturas Compra Model</description>
<author>neTIC360</author>
<version>1.0</version>
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
</imports>
<!-- Definicion del namespace del modelo -->
<namespaces>
<namespace uri="fact.model" prefix="fact"/>
</namespaces>
<types>
<!-- Definicion del nuevo tipo documental -->
<type name="fact:factura">
<title>Factura</title>
<parent>cm:content</parent>
<!-- Definicion de las propiedades -->
<properties>
<property name="fact:nfactura">
<title>Nº factura</title>
<type>d:text</type>
<mandatory>true</mandatory>
<index enabled="true">
<atomic>true</atomic>
<stored>true</stored>
<tokenised>true</tokenised>
</index>
</property>
<property name="fact:anio">
<title>Año</title>
<type>d:int</type>
<mandatory>true</mandatory>
</property>
<property name="fact:fecha">
<title>Fecha</title>
<type>d:datetime</type>
<mandatory>false</mandatory>
</property>
<property name="fact:nif">
<title>NIF</title>
<type>d:text</type>
<mandatory>false</mandatory>
</property>
<property name="fact:nproveedor">
<title>Proveedor</title>
<type>d:text</type>
<mandatory>false</mandatory>
</property>
<property name="fact:concepto">
<title>Concepto</title>
<type>d:mltext</type>
<mandatory>false</mandatory>
</property>
</properties>
</type>
</types>
</model>
De forma similar crearemos otro tipo de datos "Contrato" para lo que crearemos un fichero: "contratoModel.xml" con una estructura similar a la anterior
.- Definimos el contexto para el modelo que acabamos de crear. Para ello creamos el fichero: "model-context.xml" o lo editamos en el caso de que ya exista, ubicado en: "${alfresco}tomcat/shared/classes/alfresco/extension/" o podemos crear uno nuevo nombrándolo como "${alfresco}tomcat/shared/classes/alfresco/extension/netic360-model-context.xml"
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="netic360-extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
<property name="models">
<!-- Referencia a los modelos que hayamos creado-->
<list>
<value>alfresco/extension/contratoModel.xml</value>
<value>alfresco/extension/facturaModel.xml</value>
</list>
</property>
</bean>
</beans>
.- En el fichero "share-config-custom.xml" ubicado en "${alfresco}tomcat/shared/classes/alfresco/web-extension/" buscamos el siguiente código y añadimos la línea correspondiente a nuestro tipo de datos:
< !--
Used by the "Change Type" action
Define valid subtypes using the following example:
Remember to also add the relevant i18n string(s):
cm_mysubtype=My SubType
-- >
< types >
< type name="cm:content " >
< subtype name="fact:factura" />
< /type >
< type name="cm:folder" >
< /type >
< type name="trx:transferTarget" >
< subtype name="trx:fileTransferTarget" />
< /type >
< /types >
.- Para comprobar que el tipo de datos es correcto, reiniciamos el servicio de Alfresco y comprobamos si la acción "Cambiar tipo" funciona correctamente con nuestro tipo de datos definido
.- Si el cambio de tipo es correcto accedemos a las propiedades del documento de este nuevo tipo y podremos ver que tiene los campos correspondientes a los metadatos que hemos definido en nuestro modelo
.- La siguiente prueba sería definir una carpeta y una regla sobre esta, de forma que todo documento que entre en esta, sea especializado a nuestro tipo de datos definido
.- Para poder crear un contenido del nuevo tipo definido, buscaremos en el siguiente fichero: "share-config-custom.xml" el siguiente literal: " < config evaluator="string-compare" condition="DocumentLibrary" replace="true" >"
Tras el código que indicamos en puntos anteriores, insertamos el código siguiente:
< create-content >
< content id="fact_factura" mimetype="text/plain" label="Facturas" itemid="fact:factura" icon="" / >
< content id="con_contrato" mimetype="text/plain" label="Contrato" itemid="con:contrato" icon="" / >
< /create-content >
IMPORTANTE: Para que nos aparezcan no sólo los nuevos tipos de datos a crear , sino también los existentes, en la anterior línea debemos cambiar el valor del atributo "replace" y ponerlo a false. De esta manera, la linea quedaría como sigue:
" < config evaluator="string-compare" condition="DocumentLibrary" replace="false" >"
.- Nos faltarían los literales de traducción correspondientes a nuestro modelo, para lo que crearemos un fichero denominado: "netic360lingshot.properties"ubicado en: "${alfresco}tomcat/shared/classes/alfresco/web-extension/messages/"
De la misma manera buscamos el fichero "slingshot.properties" ubicado en: "${alfresco}\tomcat\webapps\share\WEB-INF\classes\alfresco\messages" y lo copiamos en la misma ruta que el anterior.
.- Para que estos literales sean encontrados por Alfresco Share debemos localizar el fichero "custom-slingshot-application-context.xml.sample" ubicado en: "${alfresco}tomcat/shared/classes/alfresco/web-extension/" y lo renombraremos como "custom-slingshot-application-context.xml".
< bean id="netic360slingshot.resources" class="org.alfresco.i18n.ResourceBundleBootstrapComponent" >
< property name="resourceBundles" >
< list >
< value>alfresco.web.extension.messages.slingshot< /value >
< value >alfresco.web-extension.messages.netic360slingshot< /value >
< /list >
< /property >
< /bean >
De esta manera tendríamos definido un nuevo tipo de datos, pero serán necesarias otras configuraciones para la interfaz de Alfresco Share.
Para llevar a cabo la definición de estos tipos de datos, los pasos a seguir son los siguientes:
.- Definición de un tipo datos al que llamaremos "factura". Crearemos el fichero "facturaModel.xml" en la siguiente ubicación: "${alfresco}/tomcat/shared/classes/alfresco/extension/" o bien podemos crear una carpeta más "myModel" dentro de la que ubicaremos este fichero.
<?xml version="1.0" encoding="UTF-8"?>
<model name="fact:FacturaModel"
xmlns="http://www.alfresco.org/model/dictionary/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<description>Facturas Compra Model</description>
<author>neTIC360</author>
<version>1.0</version>
<imports>
<import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
<import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
</imports>
<!-- Definicion del namespace del modelo -->
<namespaces>
<namespace uri="fact.model" prefix="fact"/>
</namespaces>
<types>
<!-- Definicion del nuevo tipo documental -->
<type name="fact:factura">
<title>Factura</title>
<parent>cm:content</parent>
<!-- Definicion de las propiedades -->
<properties>
<property name="fact:nfactura">
<title>Nº factura</title>
<type>d:text</type>
<mandatory>true</mandatory>
<index enabled="true">
<atomic>true</atomic>
<stored>true</stored>
<tokenised>true</tokenised>
</index>
</property>
<property name="fact:anio">
<title>Año</title>
<type>d:int</type>
<mandatory>true</mandatory>
</property>
<property name="fact:fecha">
<title>Fecha</title>
<type>d:datetime</type>
<mandatory>false</mandatory>
</property>
<property name="fact:nif">
<title>NIF</title>
<type>d:text</type>
<mandatory>false</mandatory>
</property>
<property name="fact:nproveedor">
<title>Proveedor</title>
<type>d:text</type>
<mandatory>false</mandatory>
</property>
<property name="fact:concepto">
<title>Concepto</title>
<type>d:mltext</type>
<mandatory>false</mandatory>
</property>
</properties>
</type>
</types>
</model>
De forma similar crearemos otro tipo de datos "Contrato" para lo que crearemos un fichero: "contratoModel.xml" con una estructura similar a la anterior
.- Definimos el contexto para el modelo que acabamos de crear. Para ello creamos el fichero: "model-context.xml" o lo editamos en el caso de que ya exista, ubicado en: "${alfresco}tomcat/shared/classes/alfresco/extension/" o podemos crear uno nuevo nombrándolo como "${alfresco}tomcat/shared/classes/alfresco/extension/netic360-model-context.xml"
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="netic360-extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
<property name="models">
<!-- Referencia a los modelos que hayamos creado-->
<list>
<value>alfresco/extension/contratoModel.xml</value>
<value>alfresco/extension/facturaModel.xml</value>
</list>
</property>
</bean>
</beans>
.- En el fichero "share-config-custom.xml" ubicado en "${alfresco}tomcat/shared/classes/alfresco/web-extension/" buscamos el siguiente código y añadimos la línea correspondiente a nuestro tipo de datos:
< !--
Used by the "Change Type" action
Define valid subtypes using the following example:
Remember to also add the relevant i18n string(s):
cm_mysubtype=My SubType
-- >
< types >
< type name="cm:content " >
< subtype name="fact:factura" />
< /type >
< type name="cm:folder" >
< /type >
< type name="trx:transferTarget" >
< subtype name="trx:fileTransferTarget" />
< /type >
< /types >
.- Para comprobar que el tipo de datos es correcto, reiniciamos el servicio de Alfresco y comprobamos si la acción "Cambiar tipo" funciona correctamente con nuestro tipo de datos definido
.- Si el cambio de tipo es correcto accedemos a las propiedades del documento de este nuevo tipo y podremos ver que tiene los campos correspondientes a los metadatos que hemos definido en nuestro modelo
.- La siguiente prueba sería definir una carpeta y una regla sobre esta, de forma que todo documento que entre en esta, sea especializado a nuestro tipo de datos definido
.- Para poder crear un contenido del nuevo tipo definido, buscaremos en el siguiente fichero: "share-config-custom.xml" el siguiente literal: " < config evaluator="string-compare" condition="DocumentLibrary" replace="true" >"
Tras el código que indicamos en puntos anteriores, insertamos el código siguiente:
< create-content >
< content id="fact_factura" mimetype="text/plain" label="Facturas" itemid="fact:factura" icon="" / >
< content id="con_contrato" mimetype="text/plain" label="Contrato" itemid="con:contrato" icon="" / >
< /create-content >
IMPORTANTE: Para que nos aparezcan no sólo los nuevos tipos de datos a crear , sino también los existentes, en la anterior línea debemos cambiar el valor del atributo "replace" y ponerlo a false. De esta manera, la linea quedaría como sigue:
" < config evaluator="string-compare" condition="DocumentLibrary" replace="false" >"
.- Nos faltarían los literales de traducción correspondientes a nuestro modelo, para lo que crearemos un fichero denominado: "netic360lingshot.properties"ubicado en: "${alfresco}tomcat/shared/classes/alfresco/web-extension/messages/"
De la misma manera buscamos el fichero "slingshot.properties" ubicado en: "${alfresco}\tomcat\webapps\share\WEB-INF\classes\alfresco\messages" y lo copiamos en la misma ruta que el anterior.
.- Para que estos literales sean encontrados por Alfresco Share debemos localizar el fichero "custom-slingshot-application-context.xml.sample" ubicado en: "${alfresco}tomcat/shared/classes/alfresco/web-extension/" y lo renombraremos como "custom-slingshot-application-context.xml".
< bean id="netic360slingshot.resources" class="org.alfresco.i18n.ResourceBundleBootstrapComponent" >
< property name="resourceBundles" >
< list >
< value>alfresco.web.extension.messages.slingshot< /value >
< value >alfresco.web-extension.messages.netic360slingshot< /value >
< /list >
< /property >
< /bean >
De esta manera tendríamos definido un nuevo tipo de datos, pero serán necesarias otras configuraciones para la interfaz de Alfresco Share.
18 de mayo de 2016
:: Liferay. Modificar los términos de uso
Cuando un usuario accede por primera vez con sus credenciales al CMS Liferay, en uno de los pasos debe aceptar los términos o condiciones de uso (si esta opción no se ha deshabilitado).
Este texto tipo aparece en inglés y, en ocasiones puede ser necesaria una adaptación o personalización de las condiciones de uso que deben mostrarse al usuario. Para ello, deberemos seguir los pasos siguientes:
.- Crearemos un nuevo contenido (puede ser global) con la descripción de los términos de uso que debe aceptar el usuario
.- Configuramos las siguientes líneas en el fichero: portal-ext.properties
Donde "xxxx" es el identificador del grupo e "yyyy" es el identificador del propio contenido que acabamos de crear.
.- Reiniciaremos el servicio de Liferay y a partir de este momento se mostrarán los nuevos términos de uso a todos los usuarios que accedan al portal
NOTA: Son necesarias las dos líneas y que ambas tengan el valor correcto
Este texto tipo aparece en inglés y, en ocasiones puede ser necesaria una adaptación o personalización de las condiciones de uso que deben mostrarse al usuario. Para ello, deberemos seguir los pasos siguientes:
.- Crearemos un nuevo contenido (puede ser global) con la descripción de los términos de uso que debe aceptar el usuario
.- Configuramos las siguientes líneas en el fichero: portal-ext.properties
terms.of.use.journal.article.group.id=xxxx
terms.of.use.journal.article.id=yyyy
Donde "xxxx" es el identificador del grupo e "yyyy" es el identificador del propio contenido que acabamos de crear.
.- Reiniciaremos el servicio de Liferay y a partir de este momento se mostrarán los nuevos términos de uso a todos los usuarios que accedan al portal
NOTA: Son necesarias las dos líneas y que ambas tengan el valor correcto
15 de mayo de 2016
:: Liferay. Para qué sirve el fichero liferay-display.xml
El fichero "docroot/WEB-INF/liferay-display.xml" describe la categoría bajo la que aparecerá nuestro portlet a la hora de añadirlo a una página.
De esta manera, podemos tener organizados y categorizados nuestros desarrollos.
Un ejemplo de contenido de este fichero podría ser el siguiente, donde nuestro portlet con identificador "libraryportlet" aparecerá bajo la categoría "netic360".
Así mismo podemos anidar categorías según nuestras necesidades.
De esta manera, podemos tener organizados y categorizados nuestros desarrollos.
Un ejemplo de contenido de este fichero podría ser el siguiente, donde nuestro portlet con identificador "libraryportlet" aparecerá bajo la categoría "netic360".
< ?xml version="1.0"? >
< !DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.1.0//EN" "http://www.liferay.com/dtd/liferay-display_6_1_0.dtd" >
< display >
< category name="netic360" >
< portlet id="libraryportlet" >< /portlet >
< /category >
< /display >
Así mismo podemos anidar categorías según nuestras necesidades.
< ?xml version="1.0"? >En el fichero anterior, nuestro portlet aparecerá bajo la categoría "netic360" > "Tienda libros" > "Tercer nivel".
< !DOCTYPE display PUBLIC "-//Liferay//DTD Display 6.1.0//EN" "http://www.liferay.com/dtd/liferay-display_6_1_0.dtd" >
< display >
< category name="netic360" >
< category name="Tienda libros" >
< category name="Tercer nivel" >
< portlet id="libraryportlet" >< /portlet >
< /category >
< /category >
< /category >
< /display >
13 de mayo de 2016
:: Liferay. Manual de uso y administración básica
En el siguiente documento de -un poco más - de 100 páginas tenemos una descripción sobre el manejo y administración básica del gestor de contenidos Liferay 6.2.
Si bien se trata de un sencillo manual, puede servirnos de guía de referencia ante cualquier duda que nos surja sobre el uso del CMS.
El documento está dividido en los siguientes puntos:
1.- Introducción
2.- Configuración
Documento realizado por Scio technology consulting
Si bien se trata de un sencillo manual, puede servirnos de guía de referencia ante cualquier duda que nos surja sobre el uso del CMS.
El documento está dividido en los siguientes puntos:
1.- Introducción
2.- Configuración
- Interfaz gráfica de usuario
- Arquitectura del portal
- Usando el panel de control
- Portlet de Documentos y multimedia
- Navegación por Documentos y multimedia
- Tipos de documentos y conjuntos de metadatos
- Extracción automática de metadatos
- Restricciones por tipo de documento
- Acceso WebDAV
- Configuración del portlet Documentos y multimedia
- Blogs
- Foros
- Wikis
Documento realizado por Scio technology consulting
11 de mayo de 2016
:: Liferay. Ocultar los términos de uso de Liferay
Cuando se crea una cuenta de acceso al CMS de Liferay, y en el momento en el que el usuario accede por primera vez con sus credenciales, normalmente este tiene que aceptar las condiciones de uso, además de llevar a cabo otras tareas relacionadas con sus datos.
Una vez el usuario acepta las condiciones de uso de Liferay, esta información se almacena en la tabla "user_" en el campo denominado "agreedToTermsOfUse".
En ocasiones, el cliente nos solicita, o puede ser interesante, que no sea necesaria la aceptación de estas condiciones de uso por parte del usuario, por lo que para lograrlo podemos añadir la siguiente línea en el fichero: portal-ext.properties
Una vez el usuario acepta las condiciones de uso de Liferay, esta información se almacena en la tabla "user_" en el campo denominado "agreedToTermsOfUse".
En ocasiones, el cliente nos solicita, o puede ser interesante, que no sea necesaria la aceptación de estas condiciones de uso por parte del usuario, por lo que para lograrlo podemos añadir la siguiente línea en el fichero: portal-ext.properties
terms.of.use.required=falseTras reiniciar el servicio, a los usuarios que accedan por primera vez con sus credenciales no se les solicitará la aceptación de las condiciones o términos de uso.
4 de mayo de 2016
:: SEO orgánico. Algunos conceptos sobre posicionamiento web
En la siguiente presentación se repasan algunos conceptos a tener en cuenta en un plan de posicionamiento web orgánico (SEO).
Tener en cuenta aspectos SEO en las primeras fases de nuestro proyecto, nos evitará problemas futuros.
Tener en cuenta aspectos SEO en las primeras fases de nuestro proyecto, nos evitará problemas futuros.
Suscribirse a:
Entradas (Atom)
:: Liferay DXP 2026. Habilitar RSS
En la versión Liferay DXP 2026 para habilitar las fuentes de datos RSS debemos seguir los pasos siguientes: 1.- Accederemos a la Configuraci...
-
En multitud de ocasiones es útil obtener el modelo de datos de una aplicación para determinar las tablas, consultas, relaciones,... En es...
-
La siguiente prueba de concepto consistirá en la creación de un webscript que liste las carpetas contenidas en una carpeta dada, pasada co...
-
En Liferay 7.3 y, en versiones anteriores, para el idioma por defecto -en las configuraciones habiturales- no se muestra el código de idioma...







