Es gracioso, pero cuando empecé la odisea de portar un componente de Joomla 1.5 a 1.7 pensé que le acabaría llamando a este artículo “Adaptando componentes de Joomla 1.5 a 1.6″. El tema es que Joomla 1.7 añade algún detallito que no tengo confirmado del todo si en 1.6 se da. Especialmente por la declaración cómo deprecated de algunas partes de la API.
Más que un tutorial, es un pequeño caso de estudio de las cosas que tuve que ir modificando en un componente de 1.5 para que funcionase en 1.7. De todas formas soy consciente de que hay cosas que necesito cambiar y mejorar en el componente para adaptarlo más a la estructura y nuevas características de la API. Especialmente de cara a asegurarme la compatibilidad con Joomla 2.5.
Para empezar con la conversión en general viene tener en cuenta una serie de detalles para empezar a dar los pasos necesarios… o en todo caso recomendables.
Estructura de directorios
Si bien la estructura de los componentes y cómo funciona e interactúa Joomla con tu componente es similar a Joomla 1.5, la estructura de directorios básica se puede ver ligeramente afectada. En Joomla 1.7 el instalador (responsable de descomprimir el paquete de tu componente y colocar cada cosa en su sitio) funciona de una manera ligeramente distinta a Joomla 1.5. A continuación vereis una gráfica (no deja de ser una captura de dos árboles de directorios) en la que muestro cómo solía colocar los directorios en J15 y cómo los coloco actualmente en componentes para J17. Desde luego se gana en sencillez.
A la izquierda está la estructura de directorios de Joomla 1.5 y a la derecha la nueva estructura de directorios de Joomla 1.7 (también aplicable en Joomla 1.6). Cómo se puede ver es bastante más sencilla. En este caso, el parte de front-end sigue estando a lo 1.5, ya que en el XML de definición del componente está directamente definido donde se encuentra. De todas formas se podría llamar sites al directorios components y dejar los directorios del front-end colgando directamente de él. En el caso del back-end es necesario colocar la zona de administración y que de ellan cuelguen directamente los diferentes directorios.
Es importante mencionar que ahora los scripts de instalación (install.kaltura.php y uninstall.kaltura.php en este caso, deben de ir en el raíz de la estructura de directorios del componente).
Definición del XML
En el XML que define el componente es necesario realizar una serie de cambios. Las directivas de idioma (etiqueta language) es la forma al estilo Joomla 1.5, estas deben ser eliminadas. Ahora simplemente se debe añadir el directorio de lenguaje a la lista de carpetas del front-end y del back-end.
El resto de elementos del fichero de definición pueden quedar tal y cómo se dejó en el original. En el caso de los scripts SQL es recomendable colocarlos en una carpeta a parte dentro de admin y indicarlo en la correspondiente directiva.
<install>
<sql>
<file driver="mysql" charset="utf8" folder="sql">sql/install.Kaltura.mysql.sql</file>
</sql>
</install>
<uninstall>
<sql>
<file driver="mysql" charset="utf8" folder="sql">sql/uninstall.Kaltura.mysql.sql</file>
</sql>
</uninstall>
Pasar de Mootools 1.2 a 1.3
Este es posible que pase a ser uno de los pasos más terribles. De Mootools 1.2 a 1.3 (y más exagerado en el caso de que estuvieses utilizando Mootools 1.1) cambian bastante cosas. Pero no implica que tengas que reescribir todo el javascript de tu componente.
- La clase Ajax ahora se llama Request.
- El método de la clase Request para lanzar la petición ahora se llama send() en lugar de request().
- El constructor de Request ahora sólo recibe un parámetro con las opciones y la url será pasada cómo una opción más dentro del array de opciones (gracias a RazZziel y a Stackoverflow).
- El manejador para la operación completada en lugar de llamarse onComplete ahora se llama onSuccess. La función que se enlace con él tendrá la misma forma que la versión anterior.
- El método setHTML deja de existir. Si quieres usar el método de Mootools propuesto para 1.3 usa simplemente el método set. Quedando algo del estilo set(‘html’, contenidoHTML);.
En un principio pongo estos puntos por que suelen ser los más habituales en los ficheros javascript que se suelen ver en los componentes para Joomla.
Desaparición de JSimpleXMLElement
Realmente no ha desaparecido, simplemente la marcaron cómo obsoleta (deprecated). Depende de la configuración que tengas en PHP la podrás usar o no. En mi caso tuve que prescindir de ella. En la documentación de Joomla sugieren utilizar directamente SimpleXMLElement de PHP debido a que su rendimiento es bastante superior.
Enlaces de interés
Tutorial de desarrollo de componentes para J17
