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
  • Préambule
  • Comment faire ?
  • Et dans le cas des actions sans hook ?

Was this helpful?

  1. Documentation française 1.4
  2. Guide du développeur
  3. Tutoriels pour développeurs

La synchronisation via les Hooks

PreviousMieux comprendre et utiliser les hooksNextSurcharge et override

Last updated 4 years ago

Was this helpful?

Cet article a été écrit par Fabien Serny, et .

Préambule

Pour savoir ce qu'est un hook, je vous conseille de vous reporter à l'article de Julien Breux ici :

Il est parfois nécessaire de mettre en place une tache automatisée (appelée également tâche cron) notamment pour certains modules permettant de synchroniser son catalogue produit avec une marketplace.

Nous allons prendre le cas du module eBay. La solution de simplicité aurait été de mettre en place une tâche automatisée permettant de resynchroniser régulièrement son catalogue produits avec la place de marché. Cependant certains problèmes peuvent se poser avec cette solution :

  • Si l'on met une tache journalière, la synchronisation des stocks ne sera pas en temps réel, ce qui peut devenir compliqué pour un marchand ayant beaucoup de clients par jour et peu de quantité pour certains produits.

  • Si l'on exécute la tâche toutes les 30mn, cela devient vite gourmand en ressource notamment si le nombre de produits dépassent les 5000. La meilleure solution pour palier à ce problème est l'utilisation des Hooks.

Comment faire ?

Si l'on étudie le problème, on se rend compte qu'il suffit de faire une synchronisation globale du catalogue à l'installation du module, puis de ne resynchroniser que les produits qui sont susceptibles d'avoir été modifiés.

Dans le cas du module eBay, un bouton permettant une première synchronisation est présent. Les synchronisations suivantes n'ont lieu que lorsqu'un produit est ajouté, modifié, effacé ou que sa quantité a diminué (passage d'une commande de ce produit).

Les hooks à utiliser sont donc les suivants :

Nom du hook

Description

addproduct

« hook » d'action « Ajout de produit »

updateproduct

« hook » d'action « Mise à jour de produit »

updateProductAttribute

« hook » d’action « Mise à jour d'attribut produit »>

deleteproduct

« hook » d’action « Effacement d'un produit »

newOrder

« hook » d'action « Nouvelle commande »

Prenons l'exemple du hook addproduct, le paramètre $params contient l'objet Product, ce qui va nous permettre de trouver facilement le produit à actualiser.

public function hookaddproduct($params)
{
    // On vérifie que l'identifiant produit est bien présent
    if (!isset($params['product']->id))
        return false;

    // Et on vérifie que celui-ci est bien valide
    $id_product = $params['product']->id;
    if ((int)$id_product < 1)
        return false;

    // Il n'y a plus qu'à lancer la synchronisation du produit sur eBay
    if ($this->_syncProducts(array('id_product' => (int)$id_product)))
        return true;

    return false;
}

Les méthodes hookupdateproduct, hookUpdateProductAttribute, hookdeleteproduct étant les mêmes, il suffira de rajouter ces quelques lignes :

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

En utilisant cette méthode, les stocks sont synchronisés en temps réel et cela évite de resynchroniser des produits qui n'en ont pas besoin.

Et dans le cas des actions sans hook ?

Dans le cas des actions sans hook (par exemple l'import de commandes eBay vers PrestaShop), il faut mieux utiliser une tâche automatisée. Mais il arrive que vous n'en ayez pas la possibilité (si vous êtes sur un serveur mutualisé par exemple).

Il existe tout de même une petite astuce qui permet de simuler une tâche automatisée à l'aide de vos visiteurs. Il vous suffit de hooker le module sur le front (de préférence un hook appelé à toutes les pages. Vous pouvez ensuite simuler une tâche automatisée à l'intérieur.

public function hookheader($params)
{
    // On vérifie que le module est bien configuré
    if (!Configuration::get('EBAY_CONFIGURED')
        return false;

    // Dans le cas où les commandes n'ont jamais été importés
    // On remplit la dernière date d'import à la date du jour
    if (!Configuration::get('EBAY_ORDER_LAST_UPDATE'))
        Configuration::updateValue('EBAY_ORDER_LAST_UPDATE',
        date('Y-m-d').'T'.date('H:i:s').'.000Z');

    // On vérifie qu'il s'est bien écoulé 30mn depuis le dernier 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)
    {
        // On récupère les commandes auprès d'eBay
        $ebay = new eBayRequest();
        $orderList = $ebay->getOrders(
                Configuration::get('EBAY_ORDER_LAST_UPDATE'),
                $dateNow);

        // On les insère en base de données
        // ... 

        // On met à jour la dernière date d'import
        Configuration::updateValue('EBAY_ORDER_LAST_UPDATE', $dateNew);

        return true;
    }

    return false;
}

Seule limite : si vous n'avez pas de trafic sur votre site, la tâche n'est jamais exécutée.

NB : Il faut également faire attention à ce que la tâche ne prenne pas trop de temps, sinon c'est le client qui aura déclenché le hook qui va en pâtir.

  • « Ce module eBay, intégré en natif dans PrestaShop et sur Addons, a été développé dans le cadre et dans l’esprit du partenariat eBay-PrestaShop : créer des services qui permettent aux marchands de développer leur activité e-commerce. En effet, le module eBay permet aux marchands de mettre en ligne facilement leurs produits sur eBay.fr et ainsi de bénéficier de ses 12 millions de visiteurs uniques/mois afin de conquérir de nouveaux clients et de gagner en visibilité. » Lucile CHANEL, Partnership Manager eBay France

NB : Pour les intéressés par le fonctionnement du hooknewOrder dans ce module, je vous laisse aller regarder directement dans le code du module eBay

publié sur le blog de PrestaShop le 22 juin 2011
Mieux comprendre et utiliser les hooks
(smile)