Blog

Comprobador gratuito de compatibilidad de módulos PrestaShop 9

Equipo de PrestaShopAddons 6 minutos de lectura

Antes de actualizar una tienda a PrestaShop 9, es recomendable saber qué módulos dejarán de funcionar. Instalar cada uno de ellos en una copia de prueba y navegar por ella funciona, pero es un proceso lento y solo muestra los problemas que se activan por casualidad.

Así que hemos escrito un pequeño script que realiza la primera pasada por ti. ps9check analiza un módulo y muestra el código que se ha eliminado en PrestaShop 8 o 9: clases y métodos principales, hooks, clases de presentador que se han trasladado, funciones de PHP eliminadas en PHP 8 y algunos problemas relacionados con la validación de temas y complementos. Es gratuito y de código abierto: github.com/asymetria/ps9-compat-check.

Inicio rápido

Necesitas tener PHP 7.4 o una versión posterior en tu ordenador o servidor. No es necesario tener PrestaShop ni Composer.

  1. Descarga el guion: ps9-compat-check (ZIP), y descomprímelo.
  2. Ejecútalo en una carpeta de módulos o en un archivo ZIP de módulos:
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip

En una tienda, los módulos se encuentran en el modules/ carpeta. Para marcarlas todas a la vez en Linux o macOS:

for m in /var/www/shop/modules/*/; do php ps9check.php "$m"; done

Cómo es un informe

Este es el resultado para la versión 2.0.4 de ps_verificar_pago, uno de los módulos de pago propios de PrestaShop, escrito en PrestaShop en 1.7 días:

PrestaShop 9 compatibility check — ps_checkpayment 2.0.4
21 files scanned

ERROR    ps_checkpayment.php:176
         Tools::displayPrice() was removed in PrestaShop 9.0.
         → Use $this->context->getCurrentLocale()->formatPrice($price, $this->context->currency->iso_code).

ERROR    ps_checkpayment.php:270
         Tools::displayPrice() was removed in PrestaShop 9.0.

NOTICE   views/templates/front/payment_infos.tpl:34
         Unfiltered output ({... nofilter}). The PrestaShop Addons review reports it as a security issue.

2 error(s), 0 warning(s), 1 notice(s)

PrestaShop corrigió este módulo hace mucho tiempo, y la versión actual funciona sin errores. Sin embargo, ese mismo código sigue ejecutándose en muchas tiendas, junto con módulos de terceros cuyos autores nunca los han actualizado.

Cada resultado indica un archivo y una línea. Para los problemas más habituales, el informe también sugiere la solución, de modo que puedes ver de inmediato si la corrección se resuelve con una sola línea de código o si supone un trabajo más extenso.

Qué comprueba

  • Clases básicas eliminadas, tanto si se utiliza con new, extends, use o llamadas estáticas. Cuando una clase solo se ha trasladado, por ejemplo, los presentadores del carrito y del producto, el informe muestra el nuevo espacio de nombres.
  • Métodos principales eliminados, como por ejemplo Tools::displayPrice(), Tools::encrypt() o Configuration::getInt(), incluidos los métodos que hereda un módulo: $this->addMedia() en un controlador frontal o $this->ajaxDie().
  • Se han eliminado las constantes y hooks, ambos en registerHook() y en hookXxx() métodos que nunca volverán a ejecutarse.
  • El rango de compatibilidad declarado. Si ps_versions_compliancy Si el valor final es inferior a 9.0, PrestaShop 9 no instalará el módulo en absoluto.
  • Eliminaciones en PHP 8. PrestaShop 9 requiere PHP 8.1 o una versión posterior, por lo que funciones como create_function() o each() también se han registrado.
  • Sobrescrituras de métodos del núcleo que ya no existen, que dejan de funcionar sin previo aviso.
  • Hummingbird y los inconvenientes de los complementos: módulos que pasan su propio código HTML al modal del carrito del tema, archivos de plantilla incluidos que dependen del tema y nofilter salida.

De dónde procede la lista de código eliminado

No escribimos la lista a mano. Un segundo script del repositorio lee el Código fuente de PrestaShop Para las versiones 1.7.8, 8.2 y 9.0, compara sus clases, métodos, constantes y hooks, y registra qué elementos han desaparecido y en qué versión. Los datos actuales abarcan 444 clases eliminadas, unos 1.800 métodos eliminados, 23 constantes y 16 hooks. Cualquiera puede recompilarlo a partir de las versiones oficiales.

Comprobamos los resultados con código real. Por nuestra cuenta Block Sliding Cart El módulo, antes de que lo adaptáramos a la versión 9 de PrestaShop, mostraba exactamente los mismos problemas que la validación de complementos había detectado en su momento. En la versión actual, que superó dicha validación, no muestra ningún error. Las versiones actuales de los propios módulos de PrestaShop tampoco presentan errores.

Su uso en la integración continua (CI)

El script devuelve el código de salida 1 cuando detecta errores, por lo que puede detener una compilación. Para un módulo alojado en GitHub, bastan dos pasos en un flujo de trabajo:

- run: curl -sL https://github.com/asymetria/ps9-compat-check/archive/refs/heads/master.tar.gz | tar xz
- run: php ps9-compat-check-master/ps9check.php .

Uso --format=json para tu propio utillaje, o --format=md una tabla que puedas pegar en una incidencia o en un informe.

Lo que no puede hacer

Se trata de un análisis estático, por lo que señala el código que PrestaShop ha eliminado. No puede determinar el tipo de una variable, por lo que una llamada como $product->something() Solo se notifica cuando ese nombre de método ya no existe en ninguna parte del núcleo. Tampoco detecta cambios en el comportamiento ni errores que solo aparecen en tiempo de ejecución.

Considéralo como un primer intento. A continuación, instala el módulo en una copia PrestaShop 9 con el modo de depuración activado, abre su página de configuración y ve seleccionando las opciones front office en el tema Hummingbird. Hemos descrito los resultados que obtuvimos con nuestro propio módulo en Actualización de un módulo PrestaShop a PrestaShop 9: qué falló y cómo lo solucionamos.

Escanear los módulos es el paso 5 de 12. Para el plan completo, desde la copia de seguridad hasta la puesta en producción, consulta nuestra checklist para actualizar PrestaShop 1.7 a 9.

Preguntas frecuentes

¿El verificador es gratuito?

Sí. Es de código abierto bajo la licencia MIT, y puedes utilizarlo en tu propia tienda, en las tiendas de tus clientes o dentro de tus propias herramientas.

¿Modifica mi módulo o sube algo?

No. Solo lee los archivos y genera un informe. No se modifica nada y no sale nada de tu ordenador.

¿Puedo ponerlo en marcha en una tienda en funcionamiento?

Sí, solo lee archivos. Aun así, lo más seguro es descargar el modules/ carpeta o los archivos ZIP de los módulos, y ejecuta la comprobación en tu propio ordenador.

El informe está vacío. ¿Está mi módulo preparado para PrestaShop 9?

Significa que no se ha detectado ninguna de las eliminaciones conocidas, lo cual es una buena señal. Pruébalo de todos modos en una copia PrestaShop 9: el verificador no puede detectar cambios en el comportamiento ni problemas de maquetación específicos del tema.

¿Qué versiones de PrestaShop abarca?

En él se detallan los elementos que se han eliminado entre las versiones 1.7.8 y 9.0, por lo que resulta útil tanto para los módulos de la versión 1.7 que se actualicen a la 8 o a la 9 como para los módulos de la versión 8.x que se actualicen a la 9.

Si el informe es extenso

Algunas correcciones consisten en una sola línea. Otras implican reescribir la forma en que un módulo carga sus clases o representa sus plantillas. Si prefieres que se lo encargue a otra persona, ese es precisamente nuestro trabajo: Correcciones del módulo PrestaShop. Envíanos el informe y te responderemos con nuestras preguntas o con un presupuesto.