Sincronización a través de Hooks
Last updated
Last updated
Este artículo fue escrito por Fabien Serny y fue publicado por primera vez el 22 de junio de 2011, en el blog PrestaShop.
Para obtener más información sobre los hooks, le aconsejo que lea el artículo de Julien Breux aquí:Comprensión y uso de hooks
A veces tenemos que configurar una tarea automatizada (también llamada "cron"), sobre todo para ciertos módulos que sincronizan su catálogo de productos a un mercado.
Echemos un vistazo al módulo eBay como ejemplo. La solución más sencilla habría sido crear una tarea automatizada periódicamente que vuelva a sincronizar su catálogo de productos con el mercado. Sin embargo, pueden surgir algunos problemas con esta solución:
Si ejecuta la tarea diaria, entonces la sincronización de inventario no será en tiempo real. Esto puede llegar a ser complicado para los comerciantes quienes tienen muchos clientes por día y una cantidad baja de determinados productos.
Si ejecuta la tarea cada 30 minutos, rápidamente se convierte intensiva de recursos, especialmente si los comerciantes cuentan con más de 5000 productos.
La mejor solución para resolver este problema es usar hooks.
Si estudiamos el problema, nos damos cuenta que sólo se puede sincronizar el catálogo global al instalar el módulo, y luego volver a sincronizar sólo los productos que probablemente han sido cambiados.
En el módulo de eBay, un botón existe para la sincronización inicial. Sincronizaciones posteriores sólo se producen cuando un producto es agregado, modificado, eliminado o si disminuye su cantidad luego de un pedido.
Los hooks que se pueden utilizar son los siguientes:
Veamos, por ejemplo, el hook addproduct
, el parámetro $params
que contiene el objeto Product
,que nos permitirá encontrar fácilmente el producto que ha sido actualizado.
Desde que los métodos hookupdateproduct
, hookUpdateProductAttribute
, y hookdeleteproduct
son todos iguales, sólo necesita añadir unas pocas líneas:
Con este método, el inventario es sincronizado en tiempo real y los productos que no necesitan resincronización están excluidos del proceso.
Tenga en cuenta: Para aquellos interesados ??en el funcionamiento de hooknewOrder
en este módulo, le sugiero que mire directamente al código del módulo eBay
Para acciones sin hooks (por ejemplo, la importación de pedidos de eBay para PrestaShop), es mejor utilizar una tarea automatizada. Aunque, esto no siempre es una opción (si estás en un servidor compartido, por ejemplo).
Aún existe un pequeño truco que simula una tarea automatizada con sus visitantes. Sólo tiene que conectar el módulo a la parte frontal (de preferencia con un hook llamado "a solicitar todas las páginas"), y luego simular una tarea automatizada en su interior.
El único problema es que si usted no cuenta con tráfico en su sitio, la tarea nunca se ejecuta.
Nota: También debe asegurarse de que la tarea no tome demasiado tiempo, de lo contrario el cliente que ha provocado el hook, se verá negativamente afectado.
Nombre del Hook
Descripción
Addproduct
Añade un producto
Updateproduct
Actualiza el producto
updateProductAttribute
Actualiza los atributos de un producto
deleteproduct
Elimina un producto
newOrder
Para un nuevo pedido