Blog
Comprobador gratuito de compatibilidad de módulos PrestaShop 9
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.
- Descarga el guion: ps9-compat-check (ZIP), y descomprímelo.
- 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,useo 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()oConfiguration::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 enhookXxx()métodos que nunca volverán a ejecutarse. - El rango de compatibilidad declarado. Si
ps_versions_compliancySi 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()oeach()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
nofiltersalida.
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.
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.
