Arquitectura¶
Visión general¶
El módulo es un módulo estándar de PrestaShop 9+ construido sobre Symfony 6.4. PrestaShop proporciona el contenedor de Symfony, Doctrine DBAL y todas las clases del framework — el módulo no incluye su propia instalación de Symfony.
PrestaShop Core
└── Symfony Container / Doctrine DBAL / Hooks
└── fabfacebookpixel module
├── Admin SPA (Vue 3) ← interfaz de configuración del backoffice
├── Admin API Controllers ← endpoints REST consumidos por el SPA
├── Front Controllers ← consumidor (sondeo de eventos), descarga de exportación del catálogo
├── Hooks (fabfacebookpixel.php)← captura de eventos, inyección de JS
├── Services
│ ├── CAEventBuilder ← construye y envía eventos CA, persiste filas FbpEvent
│ ├── CatalogExportService ← pipeline de generación de CSV por fragmentos
│ └── Logger ← escribe en var/logs/
├── Repositories ← capa de acceso a datos Doctrine/raw-DB
└── Entities ← entidades Doctrine (FbpPixel, FbpPixelSetting, etc.)
Inyección de dependencias de Symfony¶
Los servicios se declaran en config/services.yml, config/admin/services.yml y config/front/services.yml. El módulo usa inyección por constructor en todas partes. La clase principal del módulo (FabFacebookPixel) no es un servicio de Symfony en sí misma — usa $this->get(ServiceClass::class) para obtener servicios del contenedor cuando es necesario dentro de los hooks.
Esquema de base de datos¶
Todas las tablas del módulo tienen el prefijo fbp_. Se crean en la instalación mediante install/install.sql y se eliminan en la desinstalación mediante uninstall/uninstall.sql.
| Tabla | Propósito |
|---|---|
fbp_pixel_setting |
Configuración global por tienda (campo de descripción, formato de imagen, indicador de iubenda, indicador de depuración, etc.) |
fbp_pixel |
Configuraciones de píxel (ID de Píxel, token CA, código de prueba) |
fbp_pixel_country |
Ámbito de país por píxel (muchos a muchos) |
fbp_pixel_currency |
Ámbito de moneda por píxel (muchos a muchos) |
fbp_catalog_exporter |
Configuraciones de exportación del catálogo |
fbp_catalog_exporter_category |
Filtro de categoría por exportador |
fbp_catalog_exporter_manufacturer |
Filtro de fabricante por exportador |
fbp_catalog_exporter_supplier |
Filtro de proveedor por exportador |
fbp_category_mapping |
Mapeo de categoría PS → taxonomía de Google/Facebook |
fbp_attribute_mapping |
Mapeo de atributo/característica PS → columna de Facebook |
fbp_google_category |
Caché de taxonomía de Google |
fbp_facebook_category |
Caché de taxonomía de Facebook |
fbp_guest_context |
Contexto del navegador por invitado de PS (UA, IP, _fbp, _fbc) |
fbp_event |
Cola de eventos: una fila por evento disparado, rastrea el estado de envío CA / JS |
fbp_cache_setting |
Configuración de la caché del módulo (tiempo de expiración, indicador de activación) |
Multi-tienda / multi-idioma / multi-moneda¶
- La selección de píxel se resuelve por solicitud a partir del país y la moneda del visitante.
- Los ajustes de píxel (
fbp_pixel_setting) están delimitados porid_shop. - Las configuraciones de exportación del catálogo tienen cada una su propio
id_shop,id_lang,id_currency,id_country. - Los mapeos de categorías y atributos están delimitados por
id_shop.
Caché¶
Dos instancias de caché separadas:
| Caché | Ámbito | Backend |
|---|---|---|
| Caché frontend | Manejadores de hooks (sin contenedor) | Symfony\Component\Cache\Adapter\FilesystemAdapter escribiendo en _PS_CACHE_DIR_/modules/fabfacebookpixel |
| Caché del backoffice | Servicios de Symfony | Inyectado por DI mediante fabfacebookpixel.cache.di (componente Cache de Symfony) |
Claves de caché para la caché frontend: FabFacebookPixel_PixelRow_{shopId}_{countryId}_{currencyId}, FabFacebookPixel_PixelSettingRow_{shopId}.