Aller au contenu

Architecture

Vue d'ensemble

Le module est un module PrestaShop 9+ standard construit sur Symfony 6.4. PrestaShop fournit le conteneur Symfony, Doctrine DBAL et toutes les classes du framework — le module n'embarque pas sa propre installation Symfony.

PrestaShop Core
└── Symfony Container / Doctrine DBAL / Hooks
    └── fabfacebookpixel module
        ├── Admin SPA (Vue 3)           ← interface de configuration du back-office
        ├── Admin API Controllers       ← endpoints REST consommés par le SPA
        ├── Front Controllers           ← consommateur (sondage d'événements), téléchargement de l'export catalogue
        ├── Hooks (fabfacebookpixel.php)← capture d'événements, injection JS
        ├── Services
        │   ├── CAEventBuilder          ← construit et envoie les événements CA, persiste les lignes FbpEvent
        │   ├── CatalogExportService    ← pipeline de génération CSV fragmentée
        │   └── Logger                  ← écrit dans var/logs/
        ├── Repositories                ← couche d'accès aux données Doctrine/raw-DB
        └── Entities                    ← entités Doctrine (FbpPixel, FbpPixelSetting, etc.)

Injection de dépendances Symfony

Les services sont déclarés dans config/services.yml, config/admin/services.yml et config/front/services.yml. Le module utilise l'injection par constructeur partout. La classe principale du module (FabFacebookPixel) n'est pas elle-même un service Symfony — elle utilise $this->get(ServiceClass::class) pour récupérer les services du conteneur lorsque nécessaire à l'intérieur des hooks.

Schéma de base de données

Toutes les tables du module sont préfixées par fbp_. Créées à l'installation via install/install.sql, supprimées à la désinstallation via uninstall/uninstall.sql.

Table Rôle
fbp_pixel_setting Paramètres globaux par boutique (champ description, format image, indicateur iubenda, indicateur débogage, etc.)
fbp_pixel Configurations de pixels (ID Pixel, token CA, code de test)
fbp_pixel_country Portée pays par pixel (plusieurs-à-plusieurs)
fbp_pixel_currency Portée devise par pixel (plusieurs-à-plusieurs)
fbp_catalog_exporter Configurations d'export du catalogue
fbp_catalog_exporter_category Filtre de catégorie par exporteur
fbp_catalog_exporter_manufacturer Filtre de fabricant par exporteur
fbp_catalog_exporter_supplier Filtre de fournisseur par exporteur
fbp_category_mapping Mapping catégorie PS → taxonomie Google/Facebook
fbp_attribute_mapping Mapping attribut/caractéristique PS → colonne Facebook
fbp_google_category Cache de taxonomie Google
fbp_facebook_category Cache de taxonomie Facebook
fbp_guest_context Contexte navigateur par invité PS (UA, IP, _fbp, _fbc)
fbp_event File d'attente d'événements : une ligne par événement déclenché, suit le statut d'envoi CA / JS
fbp_cache_setting Configuration du cache du module (délai d'expiration, indicateur d'activation)

Multi-boutique / multi-langue / multi-devise

  • La sélection du pixel est résolue par requête à partir du pays et de la devise du visiteur.
  • Les paramètres du pixel (fbp_pixel_setting) sont délimités par id_shop.
  • Les configurations d'export du catalogue ont chacune leur propre id_shop, id_lang, id_currency, id_country.
  • Les mappings de catégories et d'attributs sont délimités par id_shop.

Cache

Deux instances de cache séparées :

Cache Portée Backend
Cache frontend Gestionnaires de hooks (sans conteneur) Symfony\Component\Cache\Adapter\FilesystemAdapter écrivant dans _PS_CACHE_DIR_/modules/fabfacebookpixel
Cache back-office Services Symfony Injecté par DI via fabfacebookpixel.cache.di (composant Cache Symfony)

Clés de cache pour le cache frontend : FabFacebookPixel_PixelRow_{shopId}_{countryId}_{currencyId}, FabFacebookPixel_PixelSettingRow_{shopId}.