LogoLogo
Homepage
  • Documentations for PrestaShop 1.4
  • English documentation 1.4
    • Getting Started
    • Updating PrestaShop
    • User Guide
      • Training
      • Customizing your shop
      • Browsing the front-office
      • Connecting to the PrestaShop back-office
      • Adding Products and Product Categories
      • A Look inside the Catalog
      • Managing Customers
      • Managing Orders
      • Managing Payment Methods
      • Managing Shipping
      • Understanding Statistics
      • Managing Modules
      • Managing Employees
      • Understanding the Preferences
      • Exploring PrestaShop's Tools
      • PrestaShop Support
    • System Administrator Guide
    • Developer Guide
      • Developer tutorials
        • Using the REST webservice
          • Chapter 1 - Creating Access to Back Office
          • Chapter 2 - Discovery - Testing access to the web service with the browser
          • Chapter 3 - First steps - Access the Web service and list client
            • 3.1 - Access the web service
            • 3.2 - Handling errors
            • 3.3 - List clients
          • Chapter 4 - Retrieve Data - Retrieving a Client
          • Chapter 5 - Modification - Update client
          • Chapter 6 - Creation - Remote Online Form
          • Chapter 7 - Removal - Remove customer accounts from the database
          • Chapter 8 - Advanced Use
          • Cheat-sheet - Concepts outlined in this tutorial
        • Understanding and using hooks
        • Synchronization via Hooks
        • Modules, Classes and Controller Override
        • Modules, Override, Web Service
        • Db class good practices for Prestashop 1.4
        • Carrier modules - functions, creation and configuration
        • Creating your own payment module
        • Accelerated Security Course - Episode 1 - Never Trust Foreign Data
        • Accelerated Security Course - Episode 2 - SQL Injections
        • Accelerated Security Course - Episode 3 - XSS
        • Accelerated Security Course - Episode 4 - CSRF
      • Fundamentals
      • Creating a PrestaShop module
      • Development standard
      • Public and overloadable methods
      • Web-service reference
      • How to use the forge to contribute to PrestaShop
      • Rocky's guides
        • PrestaShop 1.4.3 Development Guide
          • Architecture
          • Overriding Files
          • Creating Modules
          • Cookie Structure
          • Database Structure
        • PrestaShop 1.4.3 Performance Guide
    • Designer Guide
      • Coding a theme
      • Design tips
      • Implementing layered navigation in a theme
    • Troubleshooting
    • FAQ
    • User contributions
    • Documentation PDFs
  • Documentation française 1.4
    • Guide de démarrage
    • Mettre à jour PrestaShop
    • Guide de l'utilisateur
      • Formation
      • Personnaliser votre boutique
      • Se connecter au back-office de Prestashop
      • Ajouter des produits et des catégories de produits
      • Un aperçu du catalogue
      • Gérer les clients
      • Gérer les commandes
      • Gérer les méthodes de paiement
      • Gérer le transport
      • Comprendre les statistiques
      • Gérer les modules
      • Gérer les employés
      • Comprendre les préférences
      • Explorer les outils de PrestaShop
      • Obtenir de l'aide
    • Guide de l'administrateur système
    • Guide du développeur
      • Fondamentaux
      • Créer un module PrestaShop
      • Tutoriels pour développeurs
        • Tutoriel Webservice REST
          • Chapitre 1 - Mise en place - Création des accès dans le Back Office
          • Chapitre 2 - Découverte - Tester l'accès au service web avec le navigateur
          • Chapitre 3 - Premiers pas - Accéder au service web et lister les clients
            • 3.1 Accéder au service web
            • 3.2 Gestion des erreurs
            • 3.3 Lister les clients
          • Chapitre 4 - Récuperer des données : Récupérer un client
          • Chapitre 5 - Modification : Mettre à jour un client
          • Chapitre 6 - Création : Formulaire d'ajout à distance
          • Chapitre 7 - Suppression : Retirer des comptes client de la base
          • Chapitre 8 – Utilisation avancée
          • Chapitre 9 - Gestion des images
          • Chapitre 10 - Gestion des prix
          • Mémento : Notions énoncées dans ce tutoriel
        • Mieux comprendre et utiliser les hooks
        • La synchronisation via les Hooks
        • Surcharge et override
        • Modules, surcharge, web service
        • Les bonnes pratiques de la classe Db sur Prestashop 1.4
        • Les modules transporteurs - fonctionnement, création, configuration
        • Cours de sécurité accéléré no. 1 - Never trust foreign data
        • Cours de sécurité accéléré no. 2 - Injections SQL
        • Cours de sécurité accéléré no. 3 - XSS
        • Cours de Sécurité accéléré no. 4 - CSRF
    • Guide du designer
      • Conseils en design
      • Créer un thème
    • Guide du Vendeur
    • Import Wiki FR
      • Dépannage
        • Changer la taille maximum de téléchargement de fichiers
        • Comment ajouter une page à PrestaShop
        • Générer le fichier .htaccess par Prestashop pour avoir des URLs simplifiées
        • Générer un nouveau mot de passe manuellement
        • Import CSV
        • Personnalisation des mails clients
        • Problème d'allocation mémoire chez 1&1
        • Problème pour se connecter après avoir effacé une langue
        • Votre site ne répond plus, une page blanche s’affiche
      • Fidéliser les Clients
      • Gestion des Taxes
      • Installer Un Module
      • Sauvegarder votre Base de Données
    • PDF de la documentation
    • Contributions des utilisateurs
    • Questions fréquentes
  • Documentación española 1.4
    • Introducción
    • Actualización de PrestaShop
    • Guía de Usuario
      • Entrenamiento
      • Personalización de su tienda
      • Exploración del front-office
      • Conexión al back-office PrestaShop
      • Añadir Productos y Categorías de Productos
      • Una Mirada Dentro del Catálogo
      • Gestión de Clientes
      • Gestión de Pedidos
      • Gestión de Métodos de Pago
      • Gestión de Envío
      • Comprensión de las Estadísticas
      • Gestión de Módulos
      • Gestión de Empleados
      • Comprensión de Preferencias
      • Exploración de las herramientas de PrestaShop
      • Soporte PrestaShop
    • Guía del Administrador del Sistema
    • Guía del Desarrollador
      • Aspectos Fundamentales
      • Creación de un módulo de PrestaShop
      • Estándares de desarrollo
      • Manuales de desarrollador
        • Utilización del servicio web REST
          • Capítulo 1 - Creación de Acceso al Back Office
          • Capítulo 2 - Descubrimiento - Pruebas de acceso al servicio web con el navegador
          • Capítulo 3 - Primeros pasos - Acceso al servicio Web y lista de clientes
            • 3.1 - Acceso al servicio web
            • 3.2 - Manejo de errores
            • 3.3 - Enumeración de clientes
          • Capítulo 4 - Recuperación de datos - Recuperación de un cliente
          • Capítulo 5 - Modificación - Actualización de cliente
          • Capítulo 6 - Creación - Formulario En Línea Remoto
          • Capítulo 7 - Eliminación - Eliminar cuentas de clientes de la base de datos
          • Capítulo 8 - Uso avanzado
        • Comprensión y uso de hooks
        • Sincronización a través de Hooks
        • Módulos, Reemplazo, Servicio Web
        • Módulos, Clases y Reemplazo del Controlador
        • Buenas prácticas de Clase DB para Prestashop 1.4
        • Módulos de transportistas - funciones, creación y configuración
        • Curso Acelerado de Seguridad - Episodio 1 - Nunca Confíe en Datos Exteriores
        • Curso Acelerado de Seguridad - Episodio 2 - Inyecciones SQL
        • Curso Acelerado de Seguridad - Episodio 3 - XSS
        • Curso Acelerado de Seguridad - Episodio 4 - CSRF
      • Referencia del servicio web
    • Guía de Diseñador
      • Codificación de un tema
      • Consejos de Diseño
    • Solución de problemas
    • Preguntas Frecuentes
Powered by GitBook
On this page
  • Introducción
  • ¿Cómo puedo usar hooks?
  • ¿Y qué acerca de las acciones sin hooks?

Was this helpful?

  1. Documentación española 1.4
  2. Guía del Desarrollador
  3. Manuales de desarrollador

Sincronización a través de Hooks

PreviousComprensión y uso de hooksNextMódulos, Reemplazo, Servicio Web

Last updated 4 years ago

Was this helpful?

Este artículo fue escrito por Fabien Serny y fue publicado por primera vez .

Introducción

Para obtener más información sobre los hooks, le aconsejo que lea el artículo de Julien Breux aquí:

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.

¿Cómo puedo 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:

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

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.

public function hookaddproduct($params)
{
    // We check that the product identification is present
    if (!isset($params['product']->id))
        return false;

    // And we check that this one is also valid
    $id_product = $params['product']->id;
    if ((int)$id_product < 1)
        return false;

    // Now we just have to launch the product synchronization on eBay
    if ($this->_syncProducts(array('id_product' => (int)$id_product)))
        return true;

    return false;
}

Desde que los métodos hookupdateproduct, hookUpdateProductAttribute, y hookdeleteproduct son todos iguales, sólo necesita añadir unas pocas líneas:

public function hookupdateproduct($params) { $this>hookaddproduct($params);  }
public function hookupdateProductAttribute($params) { $this->hookaddproduct($params); }
public function hookdeleteproduct($params) { $this->hookaddproduct($params); }

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

¿Y qué acerca de las acciones sin hooks?

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.

public function hookheader($params)
{
    // We check that the module is configured correctly
    if (!Configuration::get('EBAY_CONFIGURED')
        return false;

    // If the orders were never imported
    // We fill in the last import date with today's date
    if (!Configuration::get('EBAY_ORDER_LAST_UPDATE'))
        Configuration::updateValue('EBAY_ORDER_LAST_UPDATE',
        date('Y-m-d').'T'.date('H:i:s').'.000Z');

    // We check that it's been 30 minutes since the last import
    $dateNow = date('Y-m-d').'T'.date('H:i:s').'.000Z';
    $date30mn = date('Y-m-d', strtotime('-45 minutes')).'T'.
            date('H:i:s', strtotime('-45 minutes')).'.000Z');
    if (Configuration::get('EBAY_ORDER_LAST_UPDATE') < $date30mn)
    {
        // We retrieve the orders from eBay
        $ebay = new eBayRequest();
        $orderList = $ebay->getOrders(
                Configuration::get('EBAY_ORDER_LAST_UPDATE'),
                $dateNow);

        // We put them into the database
        // ...

        // We update the last import date
        Configuration::updateValue('EBAY_ORDER_LAST_UPDATE', $dateNew);

        return true;
    }

    return false;

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.

el 22 de junio de 2011, en el blog PrestaShop
Comprensión y uso de hooks