30 de mayo de 2016

:: Blisk. Un navegador específico para desarrolladores



Debido a la variedad de tamaños y resoluciones de pantalla manejados en la actualidad, los desarrolladores deben asegurarse de la correcta visualización en distintos dispositivos. 
De esta manera, Blisk es una herramienta muy útil, especialmente orientada a los desarrolladores web.
Este navegador cuenta con una serie de herramientas para la emulación de dispositivos móviles (teléfonos, tabletas,...) lo que será de gran ayuda a la hora de validar sus desarrollos, aunque permite su uso en distintas fases del proyecto:
  • Prototipado
  • Desarrollo
  • Pruebas
  • Detección de errores

Más información y descargas: https://blisk.io/

25 de mayo de 2016

:: Alfresco. Búsqueda simple de tipos de datos personalizados

Alfresco en la versión 5 implementa como mejora el denominado "live search" de forma que desde el buscador de Alfresco nos muestra un listado de los resultados que cumplen con los criterios especificados, por este motivo, en el caso de utilizar tipos de datos personalizados tendremos que modificar varios ficheros.

En las búsquedas simples, los valores utilizados por defecto por ambos procesos son:

Live search
cm:name, cm:title, cm:description,  TEXT, and TAG
Simple search
cm:name, cm:title, cm:description,ia:whatEvent, ia:descriptionEvent, lnk:title, lnk:description, TEXT, and TAG

Para configurar estas búsquedas tenemos que añadir una serie de línea a los ficheros siguientes:
live-search-docs.get.config.xml
search.get.config.xml

En la versión 5 de Alfresco, estos no aparecen directamente en el sistema de ficheros, por lo que podemos extraerlos del .JAR ubicado en:
tomcat/webapps/alfresco/WEB-INF/lib/alfresco-remote-api-5.0.2.1.jar (el número de versión puede variar según la que tengamos instalada)

Una vez extraídos los ficheros (por ejemplo con winrar), veremos que la ruta de los mismos es: alfresco/templates/webscripts/org/alfresco/slingshot/search/

Si tenemos dos tipos de datos personalizados, por ejemplo "facturas" y "contratos", y queremos realizar búsquedas sobre uno de los campos:
fact:nfactura
con:ncontrato

Llevaremos a cabo las siguientes modificaciones en los ficheros indicados anteriormente:
live-search-docs.get.config.xml
<search>
<default-operator>AND</default-operator>
<default-query-template>%(cm:name cm:title cm:description fact:nfactura con:ncontrato TEXT TAG)</default-query-template>
</search>

search.get.config.xml

<search> <default-operator>AND</default-operator> <default-query-template>%(cm:name cm:title cm:description fact:nfactura con:ncontrato ia:whatEvent ia:descriptionEvent lnk:title lnk:description TEXT TAG)</default-query-template> </search>

Estos ficheros deberemos ubicarlos en la siguiente ruta de nuestro Alfresco:
shared/classes/alfresco/extension/templates/webscripts/org/alfresco/slingshot/search


Tras reiniciar el servicio de Alfresco ya nos funcionarán las búsquedas "Simple search" y "Live search".

:: Alfresco. Paquetes de idiomas

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.


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.

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
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".
< ?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"? >
< !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 >
En el fichero anterior, nuestro portlet aparecerá bajo la categoría "netic360" > "Tienda libros" > "Tercer nivel".

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
  • Interfaz gráfica de usuario
  • Arquitectura del portal
  • Usando el panel de control
3.- Gestión de documentos
  • 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
4.- Suite de colaboración de Liferay
  • 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

terms.of.use.required=false
Tras 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.




:: Cookies de nuestra página web. ¿Para qué sirve cada una?

A menudo una pregunta que nos hacen es qué cookies se están utilizando en mi página y para qué sirven. Para ver las cookies, podemos selecci...