SERGIOIGLESIAS

Blog sobre Joomla

Algunos errores (y soluciones) al migrar un módulo a Joomla 4

Hoy te traigo este pequeño artículo en el que te cuento a lo que me he enfrentado estos días al migrar mis extensiones a Joomla 4. Problemillas y soluciones que seguro te van a venir bien.

Algunos errores (y soluciones) al migrar un módulo a #Joomla4 Tuitéalo

Aunque ya tengo todo migrado (puedes ver todas las extensiones Joomla migradas: módulos, plugins y campos personalizados) hoy me voy a centrar en uno de los módulos para contarte algunos detalles a tener en cuenta.

Aunque puedes hacer el desarrollo de extensiones como tú quieras, lo mejor es seguir la documentación de Joomla y seguir las "convenciones" y estructuras que se proponen.

La estructura para versiones anteriores era la siguiente:

  • index.html: fichero sin nada para evitar posibles entradas directas al directorio del módulo.
  • mi_modulo.xml: fichero de manifesto en dónde se pone información sobre el módulo (nombre, versión, desarrollador, ficheros y carpetas que lo forman, archivos de idioma, parámetros de configuración, enlace XML de actualización de versiones). Luego volveré a él ya que para versiones de Joomla 4 hay una información más.
  • mi_modulo.php: fichero de entrada en el que cargaremos estilos, librerías (o lo que necesites) y haremos la llamada tanto al controlador como a la vista.
  • helper.php: es el "controlador" del módulo. En esta clase tendremos las consultas a base de datos en caso de ser necesarias. Veremos que aquí hay un cambio en las versiones a Joomla 4.
  • tmpl: carpeta en donde tendremos la vista o vistas que forman el módulo y donde se mostrará la información en la parte front de nuestra página web.
  • languages: carpeta con los ficheros de idioma.
  • Se pueden tener otras carpetas con los CSS, JS y/o imágenes (yo suelo meter estos directos en uno llamado assets) que se necesiten (eso sí, todo debe estar declarado de forma correcta en el XML), forms... (puedes ver esto que te digo en mi módulo SIS Carousel).

La estructura para Joomla 4 será la siguiente:

  • index.html
  • mi_modulo.xml
  • mi_modulo.php
  • tmpl
  • languages
  • Otras carpetas
  • src: aquí tendremos la carpeta Helper con nuestro "controlador" en lugar de helper.php como en anteriores versiones.

Como puedes ver, no hay mucha diferencia salvo para el tema del controlador.

El motivo de este cambio es para poder utilizar bien los namespaces (te dejo este enlace de la documentación oficial de PHP sobre namespaces por si quieres saber más sobre esta funcionalidad).

El fichero PHP que tendremos en la ruta src/Helper debe tener el nombre del módulo.
Por ejemplo: para mi módulo que se llama mod_articles_faq el Helper será ArticlesFaqHelper.php y para el que se llama mod_articles_thumbnails ArticlesThumbnailsHelper.php.

Aquí es donde tendremos que declarar el namespace del módulo.
Por ejemplo: para mod_articles_faq la declaración es namespace Joomla\Module\ArticlesFaq\Site\Helper; (te dejo que piense cómo sería el de mod_articles_thumbnails).

Pues bien, una vez tenemos esto declarado y los métodos (funciones) de esta clase, lo que antes hacíamos de esta manera para llamar al helper (dentro del fichero mi_modulo.php):

require_once dirname(__FILE__) . '/helper.php';
$items = modarticlesfaqHelper::getItems($params); // modarticlesfaqHelper es el nombre de la clase

Ahora tendremos que definir el namespace:

use Joomla\Module\ArticlesFaq\Site\Helper\ArticlesFaqHelper;
$items = ArticlesFaqHelper::getItems($params); // ahora a la clase la he llamado ArticlesFaqHelper

Básicamente, estos son los cambios importantes a la hora de migrar un módulo a Joomla 4.

Cuando me puse a hacer pruebas, instalando la nueva versión módulo, no me reconocía el namespace.

Este es el principal problema que me he encontrado. Pero... todo tiene solución.

Como te comenaba antes, en el XML de instalación (mi_modulo.xml) hay que añadir un nuevo atributo que es el que la "dice" a Joomla qué namespace se va a utilizar.

<namespace path="src">Joomla\Module\ArticlesFaq</namespace>

Puedes ver que le dices el path, "src" y el namespace "Joomla\Module\ArticlesFaq".

A partir de poner este atributo ya reconoció perfectamente todo y listo. Funcionando en Joomla 4.

Lo mejor para ver todos los cambios que he hecho es que entres en mi GitHub y veas las diferentes versiones de mis extensiones.


Espero que estos pequeños tips sobre migración de módulos a Joomla 4 te ayuden si tienes que hacer una migración.

Y si te ha gustado... comparte en twitter ;-)

Algunos errores (y soluciones) al migrar un módulo a #Joomla4 Tuitéalo

¿Te ha gustado el artículo?

Suscríbete a mi newsletter y recibe contenido exclusivo.
Podrás hacer gratis un Curso de desarrollo de plantillas Joomla.

No hay comentarios

Artículos relacionados

Solicita presupuesto

¿Quieres una página web que funcione?

Contacta conmigo y hablemos de tu proyecto.