Dyrektywa Omnibus (w Polsce znana jako ustawa o informowaniu o obniżce ceny produktu) wymusza na sklepach internetowych uczciwe informowanie klientów o promocjach.
Gdy produkt jest w obniżce, konsument musi widzieć nie tylko aktualną cenę promocyjną, lecz także najniższą cenę, jaką produkt osiągnął w określonym okresie przed obniżką — w praktyce chodzi o ostatnie 30 dni.
Celem regulacji jest ograniczenie fałszywych „promocji”, w których sklep podnosi cenę, a potem obniża ją do poziomu sprzed podwyżki, sugerując korzystną okazję. Klient ma prawo wiedzieć, czy obecna cena jest rzeczywiście atrakcyjna w porównaniu z niedawną historią.
Szersze omówienie przepisów, obowiązków przedsiębiorcy i kontekstu prawnego znajdziesz w artykule na blogu Design Cart: Czym jest dyrektywa omnibus?
Zobacz też:
Moduł DC Omnibus — co robi
DC Omnibus to rozszerzenie dla OpenCart 3, które rejestruje ceny promocyjne produktów i na karcie produktu wyświetla panel z informacją o najniższej cenie z ostatnich 30 dni.
Moduł:
- zapisuje historię cen promocyjnych w plikach tekstowych (JSON) w katalogu
storage/dc_omnibus_cache/, - przy każdym produkcie prowadzi osobny plik o nazwie odpowiadającej ID produktu (np.
14621.txt), - uwzględnia walutę sklepu oraz grupę klientów przypisaną do wpisu ceny,
- nie uwzględnia cen opcji produktu (wariantów, atrybutów z dopłatą) — operuje wyłącznie na cenie promocyjnej z karty produktu,
- wstawia na froncie konfigurowalny panel z etykietą i sformatowaną ceną,
- udostępnia w panelu administracyjnym podgląd plików cache, historii zmian ceny oraz jednorazową synchronizację istniejących promocji.
Zapis cen odbywa się wyłącznie w panelu administracyjnym — przy dodawaniu lub edycji produktu z ceną promocyjną. Front sklepu jedynie odczytuje dane i wyświetla panel. Nie modyfikuje plików cache.
Jak działa moduł
1. Rejestrowanie ceny (admin)
Przy zapisie produktu moduł nasłuchuje zdarzeń OpenCart:
admin/model/catalog/product/addProduct/after— nowy produkt,admin/model/catalog/product/editProduct/after— edycja produktu.
Po zapisie wywoływana jest biblioteka DcOmnibusPriceLogger, która dopisuje każdą aktywną cenę promocyjną (product_special) do pliku cache produktu. Eventy rejestrują się automatycznie przy instalacji modułu oraz przy pierwszym wejściu w panel konfiguracji (jeśli z jakiegoś powodu nie zostały zapisane wcześniej).
Każdy wpis w pliku zawiera:
- ts — data i godzina zapisu,
- price — wartość ceny promocyjnej (netto/brutto zgodnie z ustawieniami sklepu),
- currency — kod waluty (np. PLN, EUR),
- group — ID grupy klientów przypisanej do danej promocji.
Wpisy starsze niż 30 dni są automatycznie pomijane przy obliczaniu najniższej ceny. Moduł nie zapisuje tej samej ceny ponownie, jeśli ostatni wpis dla danej kombinacji ceny, waluty i grupy klientów pochodzi z ostatniej godziny (zabezpieczenie przed duplikatami przy wielokrotnym zapisie).
2. Wyświetlanie na karcie produktu (front)
Modyfikacja OCMOD w catalog/controller/product/product.php wywołuje bibliotekę DcOmnibusFrontend przed renderowaniem stopki strony, dzięki czemu skrypt JavaScript trafia do kolejki zasobów OpenCart.
Na stronie produktu:
- PHP odczytuje plik cache produktu i wyznacza najniższą cenę z ostatnich 30 dni dla bieżącej waluty sesji i grupy klienta.
- Do szablonu przekazywana jest konfiguracja (
window.dcOmnibusConfig) z etykietą, stylami i sformatowaną ceną. - Skrypt
catalog/view/javascript/dc_omnibus/dc_omnibus.jswstawia panel HTML w miejscu wskazanym w ustawieniach (selektor CSS + pozycja przed/za elementem).
Panel może być wyświetlany zawsze albo tylko wtedy, gdy produkt ma aktywną promocję — zgodnie z ustawieniem w panelu modułu. Wykrywanie promocji na froncie opiera się na selektorze CSS wskazanym w konfiguracji (domyślnie .product-price-special) oraz na informacji z serwera (hasSpecial).
3. Przechowywanie danych
Pliki cache znajdują się w: storage/dc_omnibus_cache/{product_id}.txt. Moduł nie tworzy dodatkowych tabel w bazie danych — cała historia cen jest w plikach tekstowych JSON. W panelu administracyjnym, w zakładce Pliki, można przeglądać listę plików i historię wpisów dla wybranego produktu.
Synchronizacja aktywnych promocji
To jedna z najważniejszych funkcji modułu, szczególnie przy wdrożeniu w sklepie, który ma już działające promocje sprzed instalacji DC Omnibus.
Problem, który rozwiązuje
Moduł zapisuje ceny promocyjne od momentu instalacji — przy każdym kolejnym zapisie produktu w panelu admina. Jeśli w sklepie było już 500 produktów w promocji, moduł nie ma wstecznej historii tych cen, dopóki administrator nie zapisze każdego produktu ręcznie. Bez historii panel Omnibus na froncie nie ma czego wyświetlić albo pokaże niepełne dane — co w kontekście dyrektywy Omnibus jest niewystarczające.
Rozwiązanie — przycisk „Synchronizuj aktywne promocje”
W zakładce Pliki panelu modułu znajduje się przycisk Synchronizuj aktywne promocje. Po kliknięciu (i potwierdzeniu w oknie dialogowym) moduł:
- Pobiera z bazy danych wszystkie aktualnie obowiązujące ceny promocyjne (
product_special). - Uwzględnia tylko produkty włączone (status aktywny) z promocją w aktualnym przedziale dat (
date_start/date_end). - Dla każdej promocji tworzy lub uzupełnia plik cache w
storage/dc_omnibus_cache/{product_id}.txt. - Zapisuje cenę wraz z grupą klientów i walutą sklepu (
config_currency). - Wyświetla komunikat z podsumowaniem, np.: „Zsynchronizowano 127 produktów (142 wpisy cen promocyjnych).”
Kiedy uruchomić synchronizację
- Bezpośrednio po instalacji modułu — to pierwszy krok po włączeniu DC Omnibus.
- Po imporcie produktów z promocjami z zewnętrznego systemu (np. hurtownia, ERP, crawler).
- Gdy pliki cache zostały przypadkowo usunięte z katalogu
storage/dc_omnibus_cache/. - Gdy podejrzewasz, że część produktów nie ma plików cache mimo aktywnej promocji.
Czego synchronizacja nie robi
- Nie odtwarza historycznych zmian ceny sprzed instalacji modułu — zapisuje obecną cenę promocyjną z bazy jako punkt wyjścia.
- Nie obejmuje produktów wyłączonych (status nieaktywny).
- Nie obejmuje promocji z przedziałem dat już wygasłym lub jeszcze nie rozpoczętym.
- Nie uwzględnia cen opcji produktu — tylko ceny promocyjne z zakładki Promocja w karcie produktu.
- Nie nadpisuje plików — dopisuje wpisy (z deduplikacją identycznych cen z ostatniej godziny).
Typowy scenariusz wdrożenia
- Zainstaluj moduł i włącz go (Status: Włączony).
- Przejdź do zakładki Pliki.
- Kliknij Synchronizuj aktywne promocje i potwierdź operację.
- Sprawdź listę plików — powinny pojawić się wpisy dla produktów w promocji.
- Otwórz kartę produktu na froncie i zweryfikuj panel z najniższą ceną z 30 dni.
- Od tego momentu każda kolejna zmiana promocji (zapis produktu) będzie automatycznie dopisywana do historii.
Ważne: synchronizacja działa niezależnie od statusu modułu na froncie — można przygotować pliki cache jeszcze przed publicznym włączeniem wyświetlania panelu Omnibus klientom.
Panel administracyjny — opis opcji
Konfiguracja modułu dostępna jest w: Rozszerzenia → Moduły → DC Omnibus (lub Rozszerzenia → Rozszerzenia → Moduły w zależności od wersji panelu). Panel podzielony jest na zakładki.
Zakładka: Ogólne
- Status modułu
- Włącza lub wyłącza cały moduł. Gdy moduł jest wyłączony, nie zapisuje cen promocyjnych przy edycji produktu i nie wyświetla panelu na froncie. Domyślnie: wyłączony.
- Nazwa administracyjna
- Nazwa modułu widoczna w panelu administracyjnym (np. na liście modułów). Domyślnie: „DC Omnibus”. Nie wpływa na treść wyświetlaną klientom na froncie.
Zakładka: Wygląd
Ustawienia wizualne panelu z najniższą ceną wyświetlanego na karcie produktu.
- Tło panelu z ceną
- Kolor tła panelu Omnibus na froncie. Domyślnie:
#f4f7f9(jasny szary). Wybierany za pomocą color pickera w panelu administracyjnym. - Etykieta — kolor czcionki
- Kolor tekstu etykiety (np. „Najniższa cena z 30 dni”). Domyślnie:
#64748b. - Etykieta — wielkość (px)
- Rozmiar czcionki etykiety w pikselach. Domyślnie: 14 px.
- Etykieta — pogrubienie
- Włącza pogrubienie (bold) tekstu etykiety. Domyślnie: wyłączone.
- Etykieta — UPPERCASE
- Wyświetla etykietę wielkimi literami (text-transform: uppercase). Domyślnie: wyłączone.
- Cena — kolor czcionki
- Kolor sformatowanej ceny najniższej z 30 dni. Domyślnie:
#0f172a(ciemny). - Cena — wielkość (px)
- Rozmiar czcionki wyświetlanej ceny. Domyślnie: 15 px.
- Cena — pogrubienie
- Włącza pogrubienie ceny. Domyślnie: włączone.
- Cena — UPPERCASE
- Wyświetla cenę wielkimi literami. Domyślnie: wyłączone.
W tej zakładce dostępny jest również podgląd panelu na żywo — zmiany kolorów i typografii widać od razu przed zapisem.
Zakładka: Front
Ustawienia dotyczące miejsca i warunków wyświetlania panelu na karcie produktu.
- Selektor ceny promocyjnej
- Selektor CSS elementu HTML, w którym motyw wyświetla cenę promocyjną. Moduł używa go do ustalenia, czy produkt jest aktualnie w promocji (tryb „Tylko przy promocji”). Domyślnie:
.product-price-special. W motywie Design Cart odpowiada to blokowi z aktualną ceną promocyjną w sekcji#product-price. W standardowym motywie OpenCart może to być inny element — należy dopasować selektor do własnego szablonu. - Wyświetl najniższą cenę
-
- Zawsze — panel z najniższą ceną z 30 dni pojawia się na każdej karcie produktu, o ile istnieje historia cen w cache.
- Tylko przy promocji — panel wyświetla się wyłącznie, gdy produkt ma aktywną cenę promocyjną. Domyślnie: Tylko przy promocji.
- Selektor miejsca wpięcia
- Selektor CSS elementu, względem którego panel Omnibus zostanie wstawiony na stronie produktu. Domyślnie:
.product-rating(sekcja ocen produktu). Jeśli selektor nie istnieje w szablonie (np. gdy opinie są wyłączone), skrypt próbuje wstawić panel przy elemencie#product-price,.product-pricelub#product. Dla motywu Design Cart zalecany selektor:#product-pricelub.product-rating. - Pozycja względem elementu
-
- Przed elementem — panel wstawiany jest bezpośrednio przed wskazanym elementem HTML.
- Za elementem — panel wstawiany jest bezpośrednio po wskazanym elemencie. Domyślnie: Za elementem.
Zakładka: Języki
Dla każdego języka skonfigurowanego w OpenCart można ustawić własną treść etykiety panelu Omnibus.
- Etykieta (per język)
- Tekst wyświetlany obok najniższej ceny, np. „Najniższa cena z 30 dni” (PL) lub „Lowest price in 30 days” (EN). Domyślna wartość dla języka polskiego: „Najniższa cena z 30 dni”. Jeśli pole zostanie puste, moduł użyje domyślnej etykiety wbudowanej w kod.
Zakładka: Pliki
Centrum zarządzania plikami cache. Zawiera listę plików w katalogu storage/dc_omnibus_cache/ oraz przycisk synchronizacji promocji.
- Synchronizuj aktywne promocje (przycisk)
- Jednorazowa operacja masowa — tworzy lub uzupełnia pliki cache dla wszystkich produktów z aktywną promocją w bazie sklepu. Szczegółowy opis w sekcji Synchronizacja aktywnych promocji. Przed wykonaniem operacji wyświetlane jest okno potwierdzenia.
Dla każdego produktu w tabeli plików wyświetlane są:
- ID produktu — identyfikator produktu OpenCart (nazwa pliku); kliknięcie otwiera historię cen,
- Wpisy — liczba zapisanych cen w pliku,
- Modyfikacja — data ostatniej zmiany pliku,
- Rozmiar — rozmiar pliku w bajtach.
Zakładka: Historia
Tabela ze szczegółową historią zmian ceny promocyjnej dla wybranego produktu (otwierana z zakładki Pliki po kliknięciu ID produktu). Kolumny:
- Data — moment zapisu ceny,
- Cena — zapisana wartość promocyjna,
- Waluta — kod waluty,
- Grupa klientów — ID grupy klientów przypisanej do promocji.
Wpisy starsze niż 30 dni są nadal widoczne w historii administracyjnej, ale nie biorą udziału w obliczaniu najniższej ceny na froncie.
Instalacja
Wymagania
- OpenCart 3.0.x lub 3.5.x (zobacz sekcję kompatybilności),
- PHP z obsługą zapisu plików w katalogu
storage/, - moduł modyfikacji OCMOD (wbudowany w OpenCart 3),
- motyw z jQuery (standardowo ładowany w OpenCart 3).
Krok 1 — Skopiowanie plików
Rozpakuj archiwum modułu i skopiuj zawartość folderu upload/ do głównego katalogu instalacji OpenCart, zachowując strukturę podkatalogów:
admin/— kontroler, języki, widoki panelu administracyjnego,catalog/— kontroler frontu, skrypt JavaScript, arkusz stylów,system/library/dc_omnibus/— biblioteki PHP modułu.
Krok 2 — Instalacja modyfikacji OCMOD
- W panelu administracyjnym przejdź do: Rozszerzenia → Instalator rozszerzeń.
- Wgraj plik
install.xml(lub spakowane archiwum z modułem, jeśli zawiera instalator OCMOD). - Przejdź do: Rozszerzenia → Modyfikacje i kliknij niebieski przycisk Odśwież (Refresh).
- Sprawdź, czy modyfikacja „DC Omnibus” ma status włączony. OCMOD odpowiada wyłącznie za integrację frontu (kontroler produktu i szablon).
Krok 3 — Instalacja i włączenie modułu
- Przejdź do: Rozszerzenia → Rozszerzenia, wybierz typ Moduły.
- Znajdź DC Omnibus i kliknij zielony przycisk instalacji (+).
- Po instalacji kliknij ikonę edycji (ołówek), aby otworzyć panel konfiguracji.
- Ustaw Status modułu na „Włączony” i skonfiguruj pozostałe opcje.
- Zapisz ustawienia.
Krok 4 — Synchronizacja istniejących promocji
Obowiązkowy krok przy wdrożeniu w sklepie z już działającymi promocjami.
- W panelu modułu przejdź do zakładki Pliki.
- Kliknij przycisk Synchronizuj aktywne promocje.
- Potwierdź operację w oknie dialogowym.
- Poczekaj na komunikat z liczbą zsynchronizowanych produktów.
- Sprawdź, czy w tabeli plików pojawiły się wpisy dla produktów w promocji.
Bez tego kroku moduł będzie rejestrował ceny wyłącznie od momentu instalacji — produkty, których promocja nie była edytowana po instalacji, nie będą miały plików cache.
Krok 5 — Dopasowanie selektorów CSS
Domyślne selektory (.product-price-special, .product-rating) pasują do motywu Design Cart. W innych motywach otwórz kartę produktu w przeglądarce, użyj narzędzi deweloperskich (F12) i wskaż właściwe klasy CSS w zakładce Front panelu modułu.
Krok 6 — Weryfikacja działania
- Edytuj produkt z aktywną ceną promocyjną i zapisz go — w pliku cache powinien pojawić się nowy wpis.
- Otwórz kartę tego produktu na froncie — powinien być widoczny panel z etykietą i najniższą ceną z 30 dni.
- W panelu modułu, zakładka Pliki → Historia, sprawdź listę wpisów cen.
Odinstalowanie
Wyłącz moduł w panelu administracyjnym, odinstaluj go z listy modułów (usuwa też eventy z bazy). Usuń modyfikację OCMOD „DC Omnibus” i odśwież modyfikacje. Pliki cache w storage/dc_omnibus_cache/ można usunąć ręcznie — moduł nie korzysta z tabel bazy danych.
Kompatybilność z wersjami OpenCart
Moduł DC Omnibus został opracowany i testowany pod:
- OpenCart 3.5.x — pełna kompatybilność, wersja docelowa,
- OpenCart 3.0.x — kompatybilność wsteczna (wymaga OCMOD i struktury katalogów OC3).
Moduł nie jest przeznaczony dla:
- OpenCart 2.x,
- OpenCart 4.x (inna architektura rozszerzeń i szablonów).
Moduł współpracuje z dowolnym motywem OpenCart 3, o ile selektory CSS w konfiguracji zostaną dopasowane do struktury HTML szablonu produktu. Motyw Design Cart (designcart) jest obsługiwany domyślnie.
Moduł obsługuje sklepy wielojęzyczne i wielowalutowe — historia cen prowadzona jest osobno dla każdej kombinacji waluty i grupy klientów.
Pobieranie modułu
Moduł DC Omnibus można pobrać bezpłatnie z:
Strona Design Cart:
Repozytorium GitHub:
Nasze moduły OMNIBUS dla innych platform:
Sklepy internetowe Woocommerce
Sklepy internetowe Opencart
Sklepy internetowe Prestashop
Sklepy internetowe Magento
Strony internetowe Joomla!
Strony Internetowe Wordpress




