Desde hace poco tiempo las condiciones para poder subir tus extensiones al JED (Centro de Extensiones de Joomla) se ha modificado y, una de ellas, es que los componentes, módulos y plugins deben tener integrado el sistema de actualizaciones (ver la noticia).
En este artículo te enseño todo sobre este sistema y cómo implementarlo en tus extensiones Joomla.
Qué es el sistema de actualizaciones de Joomla!
Básicamente, el sistema de actualizaciones de Joomla es lo que nos permite saber de forma rápida desde el panel de administarciín si alguna extensión (o el CORE) tienen una mueva versión y poder actualizar en un clic dicha extensión (o el CORE).
Qué ventajas tiene
Como ventajas del sistema de actualizaciones de Joomla tenemos las siguientes:
- No tenemos que estar pendientes de revisar contínuamente los sitios de los desarrolladores para saber si tienen nueva versión.
- No tenemos que descargar la nueva versión, guardarla y posteriormente instalarla ya que se hace todo desde el panel de administración.
Con lo cual... ganamos en tiempo y en seguridad.
Cómo se implementa el sistema de actualizaciones de Joomla!
Te voy a explicar cómo lo he hecho yo en los módulos que he desarrollado desde sergioisEXT.
El proceso se divide en 2 fases.
1/ Desarrollo en Extensión
Se trata de añadir un par de líneas de código en el fichero XML de instalación.
En mi caso (vamos a ver lo desarrollado en el módulo de Custom Thumbnails) he tenido que añadir las siguientes líneas de código en mod_custom_thumbnails.xml:
En esta línea le estoy diciendo:
- Tipo (type): poner "extension".
- Nombre (name): nombre de la extensión sobre la que se hace la comparación de versiones.
- URL: entre las etiquetas server hay que poner la URL en la que está la información sobre nueva versión y URL de actualización de la extensión.
Puedes ver el commit correspondiente en GitHub con los cambios realizados.
2/ Fichero XML con datos de actualización
Se trata de un fichero que tendrás que poner en algún sitio accesible para que pueda ser consultado.
En mi caso está en GitHub (puedes ver el fichero correspondiente del módulo sobre el que estamos viendo el ejemplo: https://sergiois.github.io/custom-thumbnails.xml).
<?xml version="1.0" encoding="utf-8"?> <updates> <update> <name>Custom Thumbnails</name> <description>Custom Thumbnails Module</description> <element>mod_custom_thumbnails</element> <type>module</type> <version>1.2.0</version> <client>site</client> <infourl title="Custom Thumbnails">https://sergiois.github.io/custom-thumbnails.html</infourl> <downloads> <downloadurl type="full" format="zip">https://github.com/sergiois/mod_custom_thumbnails/archive/master.zip</downloadurl> </downloads> <tags> <tag>stable</tag> </tags> <maintainer>Sergio Iglesias</maintainer> <maintainerurl>https://sergioiglesias.net</maintainerurl> <targetplatform name="joomla" version="(4|3\.([23456789]|10))\b"/> </update> </updates>
A continuación te explico cada una de las etiquetas:
- name: nombre de la extensión (en este caso Custom Thumbnails).
- description: descripción de la extensión (Custom Thumbnails Module).
- element: nombre completo del módulo (mod_custom_thumbnails).
- type: module (por tratarse de un módulo). En función del tipo de extensión podrá ser component, plugin, package, library...
- version: la nueva versión en la que se encuentra (si la actual es la 1.0.0 podría ser la 1.0.1). Dependerá del sistema de versionado que estés utilizando.
- client: site (ya que se trata de la parte de Front).
- infourl: está formado por el atributo "title", que lleva el nombre de la extensión (Custom Thumbnails) y por la URL en donde se encuentra la información de la misma (https://sergiois.github.io/custom-thumbnails.html).
- downloads: esta etiqueta está formada por otra, downloadurl, que tiene un atributo "type" para indicar el tipo (en mi caso "full"), un atributo "format" para indicar el formato de descarga (en mi caso "zip") y la URL en donde se encuentra la extensión para su descarga/instalación (https://github.com/sergiois/mod_custom_thumbnails/archive/master.zip).
- tags: formada por la etiqueta "tag" en la que se indica el estado de la extensión (stable, beta...).
- maintainer: nombre del desarrollador (Sergio Iglesias).
- maintainerurl: URL del desaroollador (https://sergioiglesias.net).
- targetplatform: formada por el atributo "name" (joomla) y por el atributo "vesion" en donde se indica la versión o versiones para la que es compatible. La forma de poner este valor es, 3.X en donde X puede ser las diferentes versiones de la rama 3 metidas entre corchetes. Si es compatible con las versiones 3.6, 3.7, debería tener el valor 3.[6,7].
Cambios en Joomla 4
Para Joomla 4 hay que tener en cuenta que la forma de poner las versiones en el campo de targetplatform cambia.
Si quieres que funcione para Joomla 3 y para Joomla 4, deberá tener el siguiente formato:
(4|3\.([23456789]|10))\b
Cómo funciona
El modo de funcionamiento es muy simple:
- Cuando se instala tu extensión se hace con una versión determinada (ejemplo, 1.2.0). Esto viene indicado en el fichero XML de instalación de tu extensión, en la etiqueta "version" (correspondiente al punto 1 de este artículo).
- Cuando haces cambios en tu extensión tendrás que cambiar esta versión por la nueva y, a la vez, tendrás que modificar la etiqueta del fichero XML con esa misma version (ejemplo, 1.2.1)
- Cuando accedes a tu panel de administración se va a acceder a ese XML y se va a comprobar que la versión que tiene instalada corresponde con la del XML. En caso de que la de este último sea mayor se lanzará el aviso correspondiente para proceder a actualizarlo.
- El aviso podrás verlo en 2 sitios dentro del panel de administración:
- En el dashboard o home del panel.
- Dentro de la sección Extensiones > Actualizar.
- En el dashboard o home del panel.
Recuerda que si la tienes subida en el centro de extensiones de Joomla tendrás que modificar también esta versión.
De esta forma tan sencilla, integrando el sistema de actualizaciones en tus extensiones Joomla, estarás dando mayor seguridad y velocidad de actuación a tus usuarios.
(Además, recuerda que es un requisito obligatorio para poder publicar tus extensiones en el JED)