Translate

martes, 30 de diciembre de 2014

LIFERAY. ESTE PORTLET HA SIDO DESINSTALADO...

Patrocinador




El siguiente artículo trata sobre un, llamémosle problema que si no llevas tiempo con Liferay, suele dar algunos dolores de cabeza:
"Este portlet ha sido desinstalado. Por favor, instálelo de nuevo o elimínelo de la página".
 O en idioma anglosajón:
"This portlet has been undeployed. Please, deploy it or remove it from the page".
La causa de esto, es que por alguna razón, el registro de la instancia del portlet en cuestión, está mal y, la causa principal, suele ser que se ha eliminado el registro del portlet pero ha quedado una referencia en la página donde aparece, hacia una instancia de éste (las propiedades del portlet instanciado casi siempre).

Vamos con las soluciones.

La primera consiste en simplemente, evitar que aparezca el mensaje, puesto que se trata de un portlet inactivo:

Editamos el fichero (uso Tomcat en el ejemplo):

$TOMCAT/webapps/ROOT/WEB-INF/classes/portal-ext.properties.

Si no estuviera creado, lo creamos en ese momento. En cualquier caso, lo editamos y añadimos o cambiamos la siguiente propiedad:
1: layout.show.portlet.inactive=false
Personalmente, esto lo veo más como una "ñapa" que como una solución ya que la referencia a la instancia inexistente del portlet, sigue en alguna parte.

El principal problema es que no encontramos el enlace para eliminar el portlet de manera definitiva de la página porque no se eliminó anteriormente de la forma adecuada. Sin embargo está ahí, aunque no se vea. Podemos usar Firebug o las herramientas de desarrollo del navegador que se esté usando (Firefox en el ejemplo). Usamos la herramienta de inspeccionar nodos y buscamos el del enlace para eliminar el portlet:

Inspeccionar DOM del portlet
Una vez tenemos localizado el enlace (elemento a, atributo href), copiamos el valor del atributo href y lo pegamos en la barra de direcciones del navegador y pulsamos la tecla [Intro].

Es una buena solución porque elimina las referencias que queden "errantes".

Otra posibilidad bastante más laboriosa consiste en parar el servidor de aplicaciones, eliminar la carpeta del portlet de la carpeta webapps. Acto seguido, eliminar los contenidos de las carpetas $TOMCAT/temp y $TOMCAT/work. Reiniciamos el servidor y redesplegamos el portlet.

Por último, podemos eliminar directamente estas referencias huérfanas en la base de datos. Para ello, visualizamos los registros de la tabla layout. Buscamos el registro correspondiente a la página que tiene la instancia incorrecta del portlet y localizamos el campo typesettings. Eliminamos el valor correspondiente a la instancia del portlet problemático.

Hasta otra y ¡Felices fiestas a todos!

domingo, 23 de noviembre de 2014

JOOMLA. MODIFICAR LA SECCIÓN DEL HEAD DESDE EL CÓDIGO DE UN COMPONENTE





La sección head de toda página web es de suma importancia, no solamente por que en ella solemos insertar o enlazar el código CSS y de scripts típicos (como JavaScript), sino que además los datos que contenga puede tener bastante relevancia en lo que a SEO se refiere.

Normalmente insertamos la cabecera utilizando el siguiente código:
1:   <jdoc:include type="head" />

La anterior línea carga el fichero libraries/joomla/document/html/renderer/head.php que contiene los métodos que procesan la sección head y devuelven el código HTML generado.

Ese mismo código HTML lo podemos obtener con:
1:   $doc = JFactory::getDocument();
2:   $datosSeccionHead = $doc->getHeadData();

Pero si lo que queremos es modificar esa sección desde un componente, la cosa se complica un poco si no conocemos lo que Joomla pone a nuestra disposición para realizar esta tarea. Para toda modificación, el método de la clase estática JFactory::getDocument(), nos proveerá de todo lo necesario. Para los siguientes ejemplos, seguiremos usando el ejemplo del código anterior.

Cambiar el título de la página dependiendo de la lógica del componente

El método setTitle("") nos permitirá modificar el título:
1:   $doc->setTitle("Nuevo título para esta página");

Añadir estilos CSS dependiendo de la lógica del componente

El enlace a un fichero de reglas de estilos CSS lo hacemos con:
1:   $doc->addStyleSheet("$RUTA-FICHERO-CSS/FICHERO.CSS");

Si solamente queremos añadir unas reglas pero no un fichero completo:
1:   $doc->addStyleDeclaration(".miClaseCSS{background-color:#0000ff;}");

Añadir código JavaScript dependiendo de la lógica del componente

Podemos enlazar un fichero:
1:   $doc->addScript("$RUTA-FICHERO-JS/FICHERO.JS");
O bien simplemente añadir un poco de JavaScript:
1:   $doc->addScriptDeclaration("alert('Conseguido')");

La insercción de ficheros CSS y de script, las podemos hacer también, usando el objeto JHTML:
1:   JHTML::stylesheet('fichero.css', 'ruta-al-fichero');
2:   JHTML::script('fichero.js', 'ruta-al-fichero');

Modificando los metatags dependiendo de la lógica del componente

Desde que los metatags o etiquetas <meta ... /> no son tan relevantes en el posicionamiento SEO, su uso se ha quedado un tanto olvidado. Si miramos el código fuente de una web, es probable que nos encontremos con una etiqueta meta del tipo:

<meta name="generator" content="Geany" /> ...

... donde se está indicando el software que ha generado el código de la página. Sin embargo sus usos pueden ser muchos y variados, desde redirecciones automáticas de la página, hasta usar las etiquetas meta sugeridas por Facebook que nos permiten compartir nuestros contenidos en su red social.

Joomla pone a nuestra disposición una funcionalidad mediante la cual podemos insertar etiquetas meta. Para ello nos vamos al área de administración y una vez dentro, vamos a [Sitio -> Configuración global En Joomla! 2.5] o [Sistema -> Configuración global En Joomla! 3.0]. Nos vamos al apartado donde dice [Configuración de los metadatos] y una vez allí, insertamos las metatags que estimemos oportuno.

En la práctica, lo cierto es que frecuentemente necesitamos una manera dinámica de establecer estos metatags.

Quitar el metatag "generator" puesto por defecto por Joomla:
1:   $doc->setGenerator(); // Lo ponemos vacío, sin argumentos.

Otros metatags también tienen su propio método para cambiarlos o establecerlos:
1:   $doc->setDescription("Este el meta description de la página");

Pero si no dispone de método propio, usamos setMetaData():
1:   $doc->setMetaData("author", "José Manuel Domínguez");

Los metas formados de esta manera son los típicos que contienen los atributos name y content. Si queremos que el resultado sea un meta con atributo http-equiv, tendremos que usar el mismo método pero con un argumento más:
1:   $doc->setMetaData("content-type", "text/html; charset=UTF-8", true);
// El tercer argumento indica si es un meta con el atributo http-equiv

Finalmente, debemos tener en cuenta que existen metatags que no corresponden a los estándares, sino que deben ser añadidos para la correcta ejecución de lógica de terceros (como scripts de Facebook por ejemplo):
1:   $doc->addCustomTag('<meta property="og:description" content="Curso Joomla" />');

Eso es todo. Recordad que toda esta información y más, forma parte de los cursos que ofrecemos de Joomla.

Espero que este artículo os sea de utilidad y como reencuentro con la actividad del blog que no he podido atender por falta de tiempo, durante una temporada que ya se hacía larga.

Un cordial saludo a todos y hasta otra.

viernes, 4 de julio de 2014

LIFERAY. VER UN CONTENIDO WEB COMPLETO EN UN PUBLICADOR DE CONTENIDOS DE OTRA PÁGINA

Patrocinador




Aunque Liferay tiene un amplio abanico de posibilidades, son muchos los usuarios de esta herramienta que la usan únicamente para gestión de contenidos (no olvidemos que Liferay en realidad es un gestor de portales) y antes o después acaban usando el portlet Publicador de contenidos.

Sabemos que entre otras cosas, este portlet permite una presentación preliminar o resumen de un contenido web que incluye un botón para ver el contenido completo. El comportamiento por defecto es que al pulsar ese botón, se cargue el contenido web completo.

La presentación preliminar o resumen, aparece de una forma bastante simple y se puede cambiar, pero eso lo dejo para otra entrada.

Es frecuente la necesidad de que queramos ver el contenido web completo en una página distinta de la que está mostrando el resumen. Caso real: un portal con noticias, donde en la página principal del portal hay un listado con los resúmenes de las noticias más recientes y cada resumen tiene un enlace o botón que lleva a la noticia completa, en otra página.

Esto es algo que podemos hacer con Liferay pero que tal vez no sea tan simple si no se conoce bien el proceso. No es algo complejo aunque hay que dar varios pasos y olvidar el detalle más pequeño hará que no funcione, por eso en los cursos que imparto, solemos hacer varios ejercicios al ver esta funcionalidad.

Veamos entonces como hacerlo mediante un ejercicio:

1.- Creamos dos páginas. A una la llamamos origen y a otra destino.
Liferay, dos nuevas páginas

2.- Creamos un contenido web básico, con bastante contenido. Así nos aseguramos de que en la vista previa no se verá todo y, para hacerlo, habrá que pulsar en el botón correspondiente para mostrar el contenido web completo.

Liferay, nuevo contenido básico

3.- Aunque no es necesario, vamos a establecer una clasificación al contenido, para que pueda ser seleccionado desde el publicador de contenidos de forma dinámica.


4.- Ahora vamos a preparar la página que contendrá el publicador de contenidos que mostrará el contenido de forma completa: es decir, la página de destino. Para ello, lo primero es añadir un publicador de contenidos a la página.

Liferay, publicador de contenidos, añadir
Liferay, publicador de contenidos, configuraciónTras añadir el publicador de contenidos, nos dedicaremos a configurarlo adecuadamente:





Debemos establecer varias opciones de configuración.


Liferay, publicador de contenidos, selección dinámicaLo primero es indicar que la selección de contenidos, sea dinámica:


La siguiente es que el tipo de contenido, sea contenido web:

Liferay, publicador de contenidos, tipo de contenido

Ahora hay que establecer el filtro seleccionando todos y añadiendo la etiqueta que asignamos al contenido web que creamos.

Liferay, publicador de contenidos, filtro

Indicamos como estilo de presentación: contenido completo, número de elementos a mostrar: 1. Y el punto más importante: marcar la opción establecer como publicador de contenidos por defecto para esta página.

Liferay, publicador de contenidos, establecer por defecto

5.- En este punto, volvemos al contenido web que creamos en el punto 2, lo editamos y nos vamos a la opción de página de visualización:

Liferay, contenido web, página de visualización
Una vez en este apartado de página de visualización, seleccionamos la página que utilizará el contenido para ser mostrado al completo. Esa página debe tener un publicador de contenidos configurado para ser el que por defecto, en esa página, muestre los contenidos, tal como lo indicamos en el último paso del punto anterior.


Liferay, contenido web, página de visualización, selección
Puede verse como únicamente nos ha permitido seleccionar la página Destino, que es la única que tiene un publicador de contenidos establecido por defecto. De otro modo, no podremos seleccionar la página,




6.- En este último punto realizamos algunos pasos que ya hemos realizado anteriormente, sólo que ahora vamos a realizarlos en la página de origen:

  • Añadir un publicador de contenidos y pasamos a configurarlo.
  • Escogemos selección de contenidos dinámica.
  • Tipo de contenido web.
  • Filtro: todos y etiqueta del contenido web (ejercicio, en el que he hecho yo).
  • Estilo de presentación: resúmenes.
  • Número de elementos a mostrar: 1.
Ahora, otro punto muy importante. Comportamiento del enlace entre contenidos: Ver en el portlet específico.


Esta opción, junto con la de publicador de contenidos por defecto para la página más la selección de la página de visualización para el contenido web, son la clave para que esta funcionalidad se pueda utilizar adecuadamente.

Nada más, un saludo y hasta otra. 

lunes, 30 de junio de 2014

JOOMLA. TIPOS DE EXTENSIONES.

Patrocinador






Algo que tienen en común la práctica totalidad de herramientas o aplicaciones basadas en PHP, como pueden ser Joomla, Drupal, Wordpress, etc., es que permiten su crecimiento, el aumento de sus funcionalidades, mediante el desarrollo de añadidos.

Cada herramienta, proveerá una serie de reglas que aplicar al desarrollo de estos añadidos que de no aplicarse, harían que nuestros nuevos añadidos no funcionen, no lo hagan correctamente, estemos "reinventando la rueda" (porque ya existe alguna clase o función en la herramienta que realiza lo que queremos, etc.).

En Joomla, estos añadidos reciben el nombre de extensiones y, pueden ser de diferentes tipos, cada uno distinguible principalmente, por la función que desempeñan en Joomla. De hecho, muchas de las funcionalidades que utiliza Joomla por defecto, han sido creadas mediante extensiones.

¿Cuáles son entonces estos tipos de extensiones?
  • Componentes,
  • Módulos,
  • Plugins,
  • Plantillas,
  • Lenguajes 

COMPONENTES.

Los componentes son las extensiones más complicadas. Tienen una parte pública (frontend) que muestra los datos resultantes de utilizar el componente y otra administrativa (backend), encargada de permitir la gestión del componente.

Cada componente puede añadirse al menú de navegación del sitio, como un elemento más del menú. De hecho, cada opción de menú, acaba llamando a un componente.

Los componentes son aplicaciones que pueden ser tan grandes como una red social o un portal de empleo y pueden servir de base para otras extensiones. Es común que un componente provea el contenido principal de una página de Joomla.
El menú Componentes contiene un enlace a todos los componentes instalados
Joomla, menú Componentes

Joomla, menú Extensiones
El resto de extensiones, tienen su correspondiente menú en Extensiones


MÓDULOS.

Los módulos o "boxes" podemos verlos como miniaplicaciones que podemos situar en diferentes posiciones de las páginas y que presentarán cierta información. Pueden trabajar independientemente, pero suelen estar enlazados a un componente.

Podemos acceder a los módulos a través del Gestor de módulos en el menú Extensiones.


PLUGINS.

Los plugins son un tipo de extensión un tanto especial, pues siempre trabajan en conjunción con otras. Un plugin modifica el comportamiento básico de otra extensión ante un evento. Un ejemplo simple: queremos que cuando se guarde un contenido, el plugin tome ese contenido y elimine de él cualquier palabra que consideremos ofensiva.

El nombre tradicional para los plugins es "Mambots".

Podemos acceder a los plugins a través del Gestor de plugins en el menú Extensiones.


PLANTILLAS.

Las plantillas son las extensiones que establecen el diseño de un portal Joomla y al mismo tiempo, indican las posiciones donde podemos situar módulos. Podemos hacer la plantilla más o menos completa, proveyendo incluso un área administrativa donde el usuario pueda modificar el diseño de ésta, sin necesidad de modificar el código fuente de la plantilla.

Podemos acceder a las plantillas mediante el Gestor de plantillas en el menú Extensiones.


LENGUAJES.

Por último, los lenguajes son extensiones más bien simples comparadas con las anteriores, ya que "solamente" traducen los textos de la interfaz de Joomla.

Podemos acceder a las plantillas mediante el Gestor de lenguajes en el menú Extensiones.


Todas las extensiones se instalan a través del Gestor de Extensiones:


Y eso es todo por hoy, un saludo a todos.

viernes, 30 de mayo de 2014

O COMO MODIFICAR LA PAGINACIÓN POR DEFECTO DE LISTADOS EN LIFERAY

Patrocinador




Listado
Una entrada corta, pero que puede ser muy útil, ya que puede hacernos ganar tiempo a la hora de, por ejemplo, buscar un contenido, una plantilla, una estructura, etc., en uno de los típicos listados que nos muestra Liferay. 

Lógicamente, podemos hacer uso de la utilidad de buscar..., pero por experiencia, no siempre nos devuelve el resultado que se espera y se hace necesario buscar página a página por los listados. Por defecto, Liferay establece un máximo de 75 elementos a la hora de paginar un listado:

Rango por defecto para el listado

Esto sin embargo, es muy fácil de cambiar, como puede verse en la anterior figura, donde se muestra un valor de 200 elementos por página, que además, hemos hecho que sea el rango a mostrar por defecto.

Para lograrlo, editamos el fichero portal-ext.properties que encontraremos en /webapps/ROOT/WEB-INF/classes (usando Tomcat como servidor de aplicaciones). Añadimos estas líneas:

# Indicamos la paginación por defecto. 
search.container.page.default.delta=200
# Indicamos los posibles rangos de paginación.
search.container.page.delta.values=5,10,20,30,50,75,100,125,150,200 

Finalmente, reiniciamos el servidor de aplicaciones. Puede verse una muestra del resultado en la siguiente imagen:

Nuevos posibles rangos para la paginación del listado

Nada más, saludos cordiales y hasta la próxima.

lunes, 26 de mayo de 2014

INTEGRAR IMAGEMAGICK CON LIFERAY

Patrocinador




A fecha de hoy, Liferay utiliza un software llamado PDFBox para realizar previsualizaciones de documentos que pueden apreciarse si subimos un documento .pdf a Documentos y Multimedia.
La razón de utilizar por parte de Liferay, es, tal y como nos indican en el propio portal de Liferay, utilizar software Java, compatible con la licencia de Liferay.
En el log de arranque de Liferay, podemos apreciar un texto similar (todo depende de nuestra versión de Liferay) a:
"Liferay is not configured to use ImageMagick for generating Document Library previews and will default to PDFBox. For better quality previews, install ImageMagick and enable it in portal-ext.properties." 
Donde se nos insta a utilizar ImageMagick como alternativa a PDFBox para obtener unas previsualizaciones mejores. El proceso está descrito en la documentación online de Liferay, como puede verse aquí.

Sin embargo, el proceso de integración de ImageMagick con Liferay, puede no ser tan simple como se indica en el citado artículo, teniendo en cuenta además, que han habido bugs relacionados, aunque solucionados en versiones más recientes.

Describo en esta entrada el proceso de integración, de una forma más detallada para evitar posibles quebraderos de cabeza, aunque orientado a sistemas windows, por ser la plataforma más extendida.

El primer paso es descargar e instalar GhostScript.
 
Seleccionamos la opción indicada y en la siguiente pantalla...

Pulsamos en la versión adecuada para descargar el fichero conveniente para nosotros... 

Instalamos GhostScript en el lugar que queramos. Una vez instalado, añadimos la ruta hasta la carpeta bin (ejemplo: $RUTA_INSTALACIÓN_GHOSTSCRIPT/GS9.14/BIN), en la variable de entorno PATH. Con esto facilitamos el acceso a GhostScript.

Hecho esto, vamos al segundo paso que es instalar ImageMagick. Descargamos el software adecuado para nosotros, de alguno de los mirrors indicados en la siguiente página, o bien un instalador (más cómodo) de la esta otra: http://www.imagemagick.org/script/binary-releases.php#windows

Si nos hemos decidido por la primera opción, de entre todas las posibilidades, pulsamos en la que necesitamos (en este caso, windows). Aparece otra pantalla ofreciéndonos diferentes opciones. Elegiremos la indicada para nosotros.

Descomprimimos el fichero en la carpeta de nuestra elección y, al igual que hicimos con GhostScript, añadimos a la variable de entorno PATH (recordamos que hemos orientado el artículo a Windows) la ruta de la carpeta donde hemos instalado ImageMagick, para hacernos más cómodo todo el proceso. En el anterior enlace se indica como instalar y comprobar si ésta es correcta.

En este punto debemos estar seguros de que todo ha ido bien: tanto GhostScript como ImageMagick deben estar perfectamente instalados y funcionando.

Nos vamos a la carpeta donde tengamos instalado Liferay y editamos el fichero portal-ext.properties (que estará probablemente en $CARPETA_LIFERAY/WEBAPPS/ROOT/WEB-INF/CLASSES).

En este tercer paso, añadimos las siguientes líneas:
imagemagick.enabled=true
imagemagick.global.search.path=$_RUTA_GHOSTSCRIPT\\gs9.14\\bin;
$_RUTA_IMAGEMAGICK\\ImageMagick 

Nótense las rutas con dobles barras y que se indican tanto la ruta a la carpeta bin de GhostScript, como la ruta de instalación de ImageMagick.

En el cuarto paso, arrancamos nuestro Liferay y, logados como administrador nos vamos al Panel de Control:


Seguidamente pulsamos en Administración del servidor:
Pulsamos en Servicios externos, nos aseguramos de activar la casilla de verificación correspondiente y poner las rutas (tanto la ruta a la carpeta bin de GhostScript como a la carpeta de instalación de ImageMagick):

Hecho todo esto, reiniciamos el servidor asegurándonos que hemos eliminado cualquier caché. Al subir un fichero .pdf por ejemplo, se nos mostrará una viñeta previsualizándolo.

Espero que este artículo ayude a integrar esta herramienta con Liferay más fácilmente. En próximas entradas veremos como lograr lo mismo con Xuggler.

Un cordial saludo y hasta otra.

miércoles, 23 de abril de 2014

SOBRE EL SOFTWARE LIBRE. PRIMERA PARTE.




DESVENTAJAS.

Esta entrada es la primera de una serie de ellas, dedicada al software libre, del que soy un decidido defensor. A pesar de ello, en estos artículos pretendo ser todo lo objetivo posible y para demostrarlo, esta primera entrada se va a centrar exclusivamente en las desventajas del uso de software libre. Para lograrlo, me voy a basar en la experiencia adquirida a lo largo de los años y los numerosos proyectos que he abordado.

Voy a empezar por la comunidad que está detrás de un proyecto de software libre y que puede ser, tanto el eslabón más débil o el más fuerte, si el proyecto gusta y tiene éxito, en concreto, en todo lo referente a documentación.

La documentación detrás de un proyecto de software libre depende bastante de la comunidad de usuarios que aporte recursos sobre éste. Si la comunidad no es activa aportando documentación de alguna manera, nos encontraremos con la dificultad de no saber como utilizar, desarrollar, modificar y en definitiva, sacarle rendimiento a la herramienta elegida.

Es normal, ya que al fin y al cabo, el modelo de negocio que hay detrás de un proyecto de software libre, es el soporte, la formación o ambos. Es lo que ocurre con herramientas como Prestashop o Liferay en las que, aunque existe una documentación oficial, la mayoría de aportes al respecto, vienen de parte de la comunidad que mediante mensajes en foros, blogs, etc., hacen en buena parte posible, aventurarse a trabajar con estas herramientas sin recurrir a pagar soporte o formación, que no suele ser barato precisamente.

Otra de las desventajas es la discontinuidad del proyecto que elijamos. Sin embargo, en proyectos consolidados como es el caso de Joomla, no debe ser algo que realmente debamos tener en cuenta.

Por último está la desventaja de los cambios en las versiones que van saliendo. Nos podemos encontrar en la situación en la que hemos desarrollado algo para una herramienta de software libre, que posteriormente deja de funcionar adecuadamente porque hemos actualizado la herramienta a una versión más reciente y resulta que ésta incorpora cambios que implican incompatibilidad hacia atrás (hacia versiones anteriores).

Salvo puntualizaciones, éstas son las desventajas por las que realmente me decantaría o no por la elección de una herramienta de software libre.

"Poca documentación,
falta de continuidad del proyecto y
cambios en las versiones incompatibles,
son las principales desventajas del uso
del software libre"

Dejo para la segunda parte de este artículo las ventajas.

Un cordial saludo a los que me seguís y hasta la próxima.


miércoles, 5 de febrero de 2014

LIFERAY: organizaciones con país

Patrocinador




Hasta la fecha solamente una entrada adorna este blog. La siguiente entrada pretendía ser una apología al software libre y un reconocimiento público hacia la herramienta Liferay. Sin embargo, he preferido desestimar la idea y reservar esa entrada para otro momento aunque ello suponga tardar un poco más en publicar una nueva entrada. Quería ofrecer algo práctico, útil, que es para lo que realmente decidí crear el blog.

En esta entrada en particular, toco un tema que recientemente ha aparecido en uno de los proyectos en los que colaboro (con Tracom Consulting S.L. en este caso) y que ya está llegando a su fin. En él, fue necesario planificar con extremo detenimiento el sistema jerárquico que utilizará Liferay en el proyecto. Un grupo de empresas, diferentes localizaciones, organizaciones que contienen a otras, sitios web privados por organización...

Liferay se ha prestado de manera excepcional para abordar el proyecto gracias a su sistema de sitios, organizaciones, roles, usuarios, etc.

Aún así, nos encontramos con el problema de que no podíamos usar una localización para un país concreto, por el hecho de que una organización normal en Liferay no permite tener organizaciones hijas, un requisito que necesitábamos. La solución: por supuesto usar una organización.

Pero esto nos lleva a otro problema. Por defecto, Liferay no permite asignar un país a una organización normal (regular) y, era un requerimiento importante.

Podemos modificar esto desde el fichero portal-ext.properties mediante la propiedad:

1:  organizations.country.enabled[regular-organization]=true  
El valor entre corchetes [regular-organization], indica el tipo de organización sobre el que tendrá efecto este cambio. En este caso, la organización normal de Liferay.

Como era un requisito imprescindible, también hicimos uso de otra propiedad más, que hace que indicar el país para la organización sea necesario:

1:  organizations.country.required[regular-organization]=true  
Para que los cambios realizados sobre portal-ext.properties tengan efecto reiniciamos el servidor de aplicaciones, como siempre.

El proyecto nos exigía igualmente obtener el país asignado a la organización, desde un contenido web, por lo que desde una plantilla Velocity, teníamos que obtenerlo:

1:     #if($page.getGroup().isOrganization())  
2:        #set($organizationService = $serviceLocator.findService("com.liferay.portal.service.OrganizationLocalService"))  
3:        #set($countryService = $serviceLocator.findService("com.liferay.portal.service.CountryService"))  
4:        #set($organizacionActual = $organizationService.getOrganization($page.getGroup().getOrganizationId()))  
5:        #set($pais = $countryService.getCountry($organizacionActual.getCountryId()))  
6:     #end  
Teniendo en cuenta que existen variables en el contexto de Velocity que están reservadas en los contenidos web, modificamos otra de las propiedades de portal-ext.properties (con el correspondiente reinicio del servidor de aplicaciones):

1:  journal.template.velocity.restricted.variables=  
Con esto, ya no estarán restringidas y todo lo que necesitábamos quedará cubierto.

Importante: A partir de la versión 6.2, la propiedad journal.template.velocity.restricted.variables ya no existe.
Actualización realizada el 22/01/2015
La propuesta para sustituir la anterior línea obsoleta es esta:
freemarker.engine.restricted.classes=
freemarker.engine.restricted.variables=
velocity.engine.restricted.classes=
velocity.engine.restricted.variables=

// Y para guardar compatibilidad hacia versiones anteriores:
journal.template.freemarker.restricted.variables=
journal.template.velocity.restricted.variables=

viernes, 3 de enero de 2014

COMENZANDO...





Más de una década desarrollando aplicaciones y formando en diferentes tecnologías de desarrollo, dan para mucho.
En este blog, que comienza hoy su andadura, pretendo compartir conocimientos, experiencias e impresiones sobre un mundo tan amplio y cambiante como el desarrollo, sobre todo web; campo en el que me he especializado hace ya algunos años.

El año 2013 fue el elegido, a pesar de como están las cosas... para comenzar mi andadura como emprendedor, algo que siempre he querido. Dar a conocer el software libre, ofrecer formación a cualquier persona en cualquier parte del mundo, aún cuando los recursos económicos de ésta, sean escasos, entre otros motivos, han sido los detonantes para finalmente espolearme a dar el gran paso del emprendimiento.

Aprende en Orbis Sapientia
Pero aunque pueda parecer que todo esto ha sido en cierto modo espontáneo, nada más lejos de la realidad. Llevo años preparando la idea que está detrás de Orbis Sapientia y, aunque es un proyecto que está muy verde todavía, ya comienza a ofrecer servicios, gratis la gran mayoría.

Podemos ver a la web de Orbis Sapientia, como una plataforma de enseñanza online social. La idea detrás del portal es ofrecer formación a cualquiera (online), con cursos totalmente gratis en los que no es necesario siquiera registrarse para poder seguir los cursos.

El registro de usuarios en la plataforma (que actualmente se está desarrollando), permitirá que éstos puedan acceder a otra serie de servicios, gratis nuevamente la mayoría, de pago algunos pocos, como por ejemplo un expediente de los cursos realizados por el usuario.

Los cursos del portal siguen un proceso en el que primero se activan los cursos, para después ir añadiendo lecciones, ejercicios y otros recursos. Puesto que se trata mayormente de cursos relacionados con la informática, cambian periódicamente para ajustarse a los constantes cambios que se producen en las diferentes áreas de este campo. De momento, solamente hay un curso online completo, un curso de XML. El primero de muchos que estarán libremente accesibles para cualquiera.

Existen otros servicios que si son de pago (de aire solamente "es muy complicado vivir"), pero la mayoría a precios muy reducidos, como la descarga de los cursos que están online, para su disfrute sin estar conectados. Como especialista en herramientas como Liferay y otras como Prestashop, soy consciente de que una formación de calidad en ellas es realmente cara, por lo que he comenzado la creación de cursos sobre estas herramientas, que, aún siendo de pago, están a un precio mucho más asequible. Actualmente, solamente se está ofreciendo uno: Creación de contenidos en Liferay, que como puede verse en su temario, se orienta más al lado práctico y al día a día del sufrido desarrollador.

Este blog es pues un complemento del portal Orbis Sapientia. Si consigo ayudar de alguna manera, aunque sea provocando alguna idea de forma indirecta, que sirva para que la situación de alguno de vosotros mejore, me daré por satisfecho y consideraré el blog como exitoso.

No me extiendo más en esta entrada. Sed bienvenidos todos los que queráis aprender o aportar algo. Un cordial saludo.