PS PrestaShop Intermedio

dfomnibus — Conformità Direttiva Omnibus per PrestaShop

Installazione, configurazione, cron, modalità di calcolo, dashboard e risoluzione dei problemi del modulo dfomnibus per la conformità alla Direttiva europea Omnibus.

Aggiornato Versione del modulo 1.0.1

Il modulo dfomnibus mette il tuo negozio PrestaShop in conformità con la Direttiva europea 2019/2161 nota come Omnibus, in vigore in tutta l’Unione Europea dal 28 maggio 2022. Costruisce continuamente la cronologia dei prezzi di ogni prodotto e, non appena una promozione è attiva, mostra il prezzo più basso registrato durante i 30 giorni precedenti.

Compatibilità: PrestaShop da 8.0 a 9.x. PHP da 7.4 a 8.3. Multi-negozio, multi-valuta e multi-combinazione supportati in modo nativo. Nessun componente di terze parti, nessun CDN, GDPR-friendly.

Installazione

L’installazione richiede meno di cinque minuti.

  1. Scarica il file dfomnibus_v1.0.1.zip dalla tua area cliente DataFirefly.
  2. Nel back office di PrestaShop, vai a Moduli → Gestore moduli → Carica un modulo.
  3. Carica lo ZIP. PrestaShop crea le tabelle, genera un token cron e registra gli hook necessari.
  4. Fai clic su Configura per aprire la schermata delle impostazioni.

Due tabelle create: ps_dfomnibus_price_history per gli snapshot e ps_dfomnibus_compliance_log per gli eventi di conformità (riservata per usi futuri). Il prefisso ps_ viene sostituito automaticamente con il tuo.

Programmazione del cron giornaliero

Il cron inizializza la cronologia del tuo catalogo e garantisce la continuità degli snapshot giornalieri, anche per i prodotti il cui prezzo non cambia mai. Senza un cron attivo, il modulo funziona ma la sua cronologia si limita ai prodotti modificati manualmente.

Recupero del token

Apri la schermata di configurazione del modulo. Il token cron visualizzato è unico per la tua installazione. Ottieni un URL della forma:

https://il-tuo-negozio.com/modules/dfomnibus/cron.php?token=TUO_TOKEN

Programmazione tramite cron Unix

Aggiungi la seguente riga al tuo crontab, regolando l’ora in base al tuo traffico (idealmente in orari a bassa affluenza):

15 3 * * * curl -s "https://il-tuo-negozio.com/modules/dfomnibus/cron.php?token=TUO_TOKEN" > /dev/null

Programmazione tramite CLI

Se preferisci evitare qualsiasi esposizione HTTP, esegui il cron direttamente da riga di comando:

php /percorso/al/tuo-negozio/modules/dfomnibus/cron.php token=TUO_TOKEN

Sicurezza del token: il modulo utilizza hash_equals() per confrontare i token, il che protegge dagli attacchi di timing. Non condividere mai questo token e rigeneralo se sospetti una compromissione (pulsante Rigenera token nella configurazione).

Opzioni di configurazione

Attivazione della visualizzazione

L’interruttore Attiva la visualizzazione controlla l’inserimento del messaggio di conformità sotto il prezzo del prodotto. Puoi disattivarlo temporaneamente per mantenere la raccolta della cronologia senza mostrare l’avviso in frontend (utile durante una transizione o durante i test).

Modalità di calcolo

Sono disponibili due modalità:

  • Rigorosa: il prezzo di riferimento è il minimo registrato durante i 30 giorni precedenti l’inizio effettivo della promozione in corso. Corrisponde alla lettera della direttiva.
  • Conservativa (consigliata per impostazione predefinita): il prezzo di riferimento è il minimo sui 30 giorni scorrevoli. Interpretazione più sfavorevole per il commerciante ma più difensiva in caso di ispezione.

Quale modalità scegliere? Se il tuo negozio ha una politica promozionale chiara, con date di inizio e fine ben tracciate, la modalità rigorosa è perfetta. In caso di dubbio, o se le tue regole SpecificPrice vengono modificate frequentemente senza una netta discontinuità tra periodi promozionali e non promozionali, la modalità conservativa è più sicura.

Periodo di riferimento

Il periodo è fissato a 30 giorni per impostazione predefinita, conformemente alla direttiva. Puoi aumentarlo (60, 90 giorni) per essere ancora più prudente, ma il valore minimo resta 30 giorni.

Esclusione dei prodotti recenti

L’opzione Escludi prodotti di età inferiore a X giorni nasconde la visualizzazione per i prodotti troppo recenti. Valore predefinito: 30 giorni. È coerente con lo spirito della direttiva, che si applica solo ai prodotti con una cronologia dei prezzi significativa.

Restrizione UE

Se vendi sia dentro che fuori l’UE, seleziona Limita la visualizzazione all’Unione Europea. Il modulo rileva il paese del cliente in questo ordine:

  1. Indirizzo di consegna del cliente collegato
  2. Indirizzo del carrello corrente
  3. Paese predefinito del negozio

Se nessuna di queste informazioni è disponibile, la visualizzazione è attiva per impostazione predefinita per evitare qualsiasi rischio di non conformità involontaria.

Nascondi quando il prezzo è uguale

L’opzione Nascondi se il prezzo è identico rimuove il messaggio quando il prezzo corrente corrisponde esattamente al prezzo più basso degli ultimi 30 giorni. Utile per evitare di visualizzare informazioni senza valore aggiunto per il consumatore.

Sconto reale

Attiva Mostra sconto reale per completare il messaggio con la percentuale calcolata in base al prezzo Omnibus, e non al prezzo barrato. Esempio: un prodotto a 89 €, in promozione a 59 €, con un prezzo Omnibus di 65 € mostrerà -9,2 % di sconto reale invece del -33 % calcolato sul prezzo barrato. È più onesto, ma ogni commerciante è libero di scegliere.

Grafico

Il grafico di 30 giorni può essere visualizzato in una scheda dedicata del prodotto o in linea sotto il prezzo. Viene caricato in lazy tramite IntersectionObserver e si attiva solo all’ingresso nella viewport, il che garantisce un impatto nullo sui Core Web Vitals delle tue schede prodotto.

Tracciamento per combinazione

Seleziona Traccia combinazioni se i tuoi prodotti hanno prezzi diversi per combinazione (ad esempio taglie XL con supplemento). La cronologia viene quindi segmentata per id_product_attribute e l’avviso Omnibus si adatta al prezzo della combinazione selezionata.

Conservazione

La durata di conservazione predefinita è di 365 giorni. Oltre, la cronologia viene automaticamente eliminata all’esecuzione del cron. Il valore minimo è di 60 giorni per garantire un margine di sicurezza rispetto alla finestra legale di 30 giorni.

Dashboard di conformità

Accessibile tramite Moduli → Dashboard DataFirefly Omnibus, la dashboard riunisce:

  • Il numero di prodotti tracciati
  • Il totale degli snapshot registrati
  • La data e l’ora dell’ultima esecuzione del cron
  • L’elenco dei prodotti con, per ciascuno, la data della prima acquisizione, la data dell’ultima acquisizione, il prezzo più basso degli ultimi 30 giorni e un indicatore di promozione attiva

Per ogni prodotto sono disponibili tre azioni:

  • Visualizza cronologia: mostra fino a 1000 snapshot con timestamp
  • Snapshot manuale: forza l’acquisizione immediata
  • Elimina cronologia: reimposta il tracciamento per questo prodotto (da usare con cautela)

Esportazione CSV

Dalla visualizzazione della cronologia di un prodotto, il pulsante Esporta in CSV genera un file con tutte le colonne con timestamp (data, prezzo IVA esclusa, prezzo IVA inclusa, valuta, negozio, combinazione, indicatore promo, fonte dell’acquisizione). Formato pronto per l’archiviazione o per essere consegnato a un ispettore.

Comportamento in frontend

Sulla scheda prodotto, non appena una promozione è attiva, viene automaticamente visualizzato il seguente avviso sotto il prezzo:

Prezzo più basso degli ultimi 30 giorni: 65,00 €

Il messaggio viene tradotto in base alla lingua del negozio (francese, inglese, spagnolo, tedesco). La visualizzazione utilizza l’hook standard displayProductPriceBlock e funziona con tutti i temi che rispettano gli standard di PrestaShop (Classic, Hummingbird, Warehouse, Transformer, Panda).

Rendering unico per pagina: il modulo include una protezione static $rendered che garantisce che l’avviso appaia una sola volta per pagina, anche se l’hook displayProductPriceBlock viene chiamato più volte (blocchi riepilogativi, sticky, ecc.).

Multi-negozio e multi-valuta

La cronologia viene memorizzata per tupla univoca (id_product, id_product_attribute, id_shop, id_currency). Ogni negozio della tua installazione mantiene quindi la propria cronologia e ogni valuta attiva ha la propria curva dei prezzi. Nessuna conversione al volo: gli importi visualizzati corrispondono esattamente a quanto è stato registrato al momento dell’acquisizione.

Risoluzione dei problemi

L’avviso non appare sulla scheda prodotto

Verifica in ordine:

  1. L’opzione Attiva la visualizzazione è selezionata nella configurazione?
  2. Il cron è stato eseguito almeno una volta? In caso contrario, non esiste cronologia.
  3. La restrizione UE è attivata mentre stai testando da un paese non UE?
  4. L’opzione Nascondi se il prezzo è identico è attiva e il prezzo corrente corrisponde al minimo?
  5. Il prodotto ha meno di 30 giorni (con l’opzione di esclusione delle novità attiva)?

Il grafico non si carica

Apri la console del browser. Il modulo si aspetta un endpoint AJAX esposto dal controller front pricehistory. Verifica che nessun sistema di cache o firewall intercetti questa route. Se utilizzi un CDN, autorizza esplicitamente gli URL /module/dfomnibus/pricehistory.

Il cron restituisce un errore 403 o 401

Il token nell’URL non corrisponde a quello registrato. Torna alla configurazione del modulo e copia il token corrente. Se sospetti una fuga, fai clic su Rigenera token e aggiorna il tuo cron Unix.

Errore SQL durante lo snapshot

Se sei sulla versione 1.0.0, aggiorna alla 1.0.1. La versione iniziale conteneva un difetto in tre query Db::getRow() che aggiungevano un LIMIT 1 manuale mentre PrestaShop ne aggiunge già uno automaticamente, il che produceva un LIMIT 1 LIMIT 1 SQL non valido. Vedi il changelog.

Domande frequenti

Il modulo è obbligatorio per il mio negozio?

Sì, se vendi a consumatori stabiliti nell’Unione Europea e mostri prezzi ridotti, promozioni, codici promozionali, saldi o qualsiasi menzione che faccia riferimento a una riduzione. La Direttiva Omnibus si applica senza soglia minima di fatturato.

Qual è la differenza con le CartRule?

Il modulo tiene traccia solo dei prezzi provenienti dai record SpecificPrice di PrestaShop (sconti sul prodotto, sconti per quantità, sconti per gruppo cliente). Le regole del carrello (CartRule) si applicano al checkout e non modificano il prezzo unitario visualizzato sulla scheda prodotto: cadono quindi al di fuori dell’ambito della direttiva.

Come funziona esattamente la modalità rigorosa?

Il modulo cerca nella cronologia l’ultimo snapshot non promozionale, e poi il primo snapshot promozionale che lo segue. Quella data è l’inizio della promozione in corso. La finestra di riferimento sono quindi i 30 giorni precedenti quella data. Se non è possibile rilevare alcuna transizione da non-promo a promo, il modulo passa automaticamente alla modalità conservativa.

Posso nascondere l’avviso su alcuni prodotti?

Il modulo si applica globalmente, ma l’opzione di esclusione dei prodotti recenti e l’opzione di nascondere se il prezzo è uguale coprono la maggior parte dei casi in cui la visualizzazione non porta informazioni utili.

Compatibile con prezzi IVA esclusa/IVA inclusa?

Sì. Il modulo registra entrambi gli importi (price_tax_excl e price_tax_incl) a ogni snapshot e visualizza quello utilizzato dal negozio. Se passi da una modalità all’altra, la cronologia rimane utilizzabile.

Changelog

1.0.1 — 14 maggio 2026

  • Correzione: rimosso il LIMIT 1 manuale da tre query Db::getRow() che producevano un LIMIT 1 LIMIT 1 SQL non valido. Interessava la garanzia di idempotenza della registrazione e il rilevamento dell’inizio della promo in modalità rigorosa.

1.0.0 — 14 maggio 2026

  • Versione iniziale
  • Acquisizione automatica della cronologia dei prezzi tramite hook e cron giornaliero
  • Visualizzazione del prezzo più basso in 30 giorni sulla pagina del prodotto
  • Grafico di 30 giorni in canvas vanilla, lazy-load, ~3 KB
  • Dashboard di conformità con statistiche ed esportazione CSV
  • Modalità di calcolo rigorosa e conservativa
  • Supporto multi-negozio, multi-valuta e multi-combinazione
  • Restrizione UE configurabile, esclusione dei prodotti recenti, opzione nascondi se uguale
  • Traduzioni in FR, EN, ES, DE
Questa pagina ti è stata utile?

Ancora bloccato? Contatta l'assistenza