Architettura¶
Panoramica¶
Il modulo è un modulo PrestaShop 9+ standard costruito su Symfony 6.4. PrestaShop fornisce il container Symfony, Doctrine DBAL e tutte le classi del framework — il modulo non include la propria installazione Symfony.
PrestaShop Core
└── Symfony Container / Doctrine DBAL / Hooks
└── fabfacebookpixel module
├── Admin SPA (Vue 3) ← interfaccia di configurazione del backoffice
├── Admin API Controllers ← endpoint REST consumati dal SPA
├── Front Controllers ← consumer (polling eventi), download esportazione catalogo
├── Hooks (fabfacebookpixel.php)← cattura eventi, iniezione JS
├── Services
│ ├── CAEventBuilder ← costruisce e invia eventi CA, persiste righe FbpEvent
│ ├── CatalogExportService ← pipeline di generazione CSV a frammenti
│ └── Logger ← scrive in var/logs/
├── Repositories ← livello di accesso ai dati Doctrine/raw-DB
└── Entities ← entità Doctrine (FbpPixel, FbpPixelSetting, ecc.)
Dependency Injection Symfony¶
I servizi sono dichiarati in config/services.yml, config/admin/services.yml e config/front/services.yml. Il modulo utilizza l'iniezione per costruttore ovunque. La classe principale del modulo (FabFacebookPixel) non è essa stessa un servizio Symfony — utilizza $this->get(ServiceClass::class) per recuperare i servizi dal container quando necessario all'interno degli hook.
Schema del database¶
Tutte le tabelle del modulo hanno il prefisso fbp_. Create all'installazione tramite install/install.sql, eliminate alla disinstallazione tramite uninstall/uninstall.sql.
| Tabella | Scopo |
|---|---|
fbp_pixel_setting |
Impostazioni globali per negozio (campo descrizione, formato immagine, flag iubenda, flag debug, ecc.) |
fbp_pixel |
Configurazioni pixel (ID Pixel, token CA, codice di test) |
fbp_pixel_country |
Ambito paese per pixel (molti-a-molti) |
fbp_pixel_currency |
Ambito valuta per pixel (molti-a-molti) |
fbp_catalog_exporter |
Configurazioni di esportazione del catalogo |
fbp_catalog_exporter_category |
Filtro categoria per esportatore |
fbp_catalog_exporter_manufacturer |
Filtro produttore per esportatore |
fbp_catalog_exporter_supplier |
Filtro fornitore per esportatore |
fbp_category_mapping |
Mappatura categoria PS → tassonomia Google/Facebook |
fbp_attribute_mapping |
Mappatura attributo/caratteristica PS → colonna Facebook |
fbp_google_category |
Cache tassonomia Google |
fbp_facebook_category |
Cache tassonomia Facebook |
fbp_guest_context |
Contesto browser per ospite PS (UA, IP, _fbp, _fbc) |
fbp_event |
Coda eventi: una riga per evento attivato, traccia lo stato di invio CA / JS |
fbp_cache_setting |
Configurazione cache del modulo (timeout, flag di abilitazione) |
Multi-negozio / multi-lingua / multi-valuta¶
- La selezione del pixel viene risolta per richiesta in base al paese e alla valuta del visitatore.
- Le impostazioni del pixel (
fbp_pixel_setting) sono delimitate perid_shop. - Le configurazioni di esportazione del catalogo hanno ciascuna il proprio
id_shop,id_lang,id_currency,id_country. - Le mappature di categorie e attributi sono delimitate per
id_shop.
Cache¶
Due istanze di cache separate:
| Cache | Ambito | Backend |
|---|---|---|
| Cache frontend | Gestori di hook (senza container) | Symfony\Component\Cache\Adapter\FilesystemAdapter che scrive in _PS_CACHE_DIR_/modules/fabfacebookpixel |
| Cache backoffice | Servizi Symfony | Iniettato tramite DI via fabfacebookpixel.cache.di (componente Cache Symfony) |
Chiavi di cache per la cache frontend: FabFacebookPixel_PixelRow_{shopId}_{countryId}_{currencyId}, FabFacebookPixel_PixelSettingRow_{shopId}.