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 parid_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}.