# Wyprzedaż Błyskawiczna i Licznik Odliczający: kompletny przewodnik

> Prezentacja i wymagania Wyprzedaż Błyskawiczna zamienia Twoje promocje w prawdziwe wyprzedaże flash o ograniczonym czasie trwania. Planujesz kampanię w oknie dat, a moduł automatycznie stosuje rabat przez natywne ceny specyficzne…

- Strona: <https://www.datafirefly.com/pl/documentation/dfflashsale/>
- Język: pl
- Zaktualizowano: 2026-10-01
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfflashsale/index.md), [en](https://www.datafirefly.com/en/documentation/dfflashsale/index.md), [es](https://www.datafirefly.com/es/documentation/dfflashsale/index.md), [de](https://www.datafirefly.com/de/documentation/dfflashsale/index.md), [it](https://www.datafirefly.com/it/documentation/dfflashsale/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfflashsale/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfflashsale/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Prezentacja i wymagania

Wyprzedaż Błyskawiczna zamienia Twoje promocje w prawdziwe wyprzedaże flash o ograniczonym czasie trwania. Planujesz kampanię w oknie dat, a moduł automatycznie stosuje rabat przez natywne ceny specyficzne PrestaShop i wyświetla licznik odliczający zsynchronizowany z czasem serwera. Cena promocyjna obowiązuje więc wszędzie: na karcie produktu, w listingach, w koszyku i w e-mailach, bez żadnej modyfikacji Twojego motywu.

- Zgodny z PrestaShop 8.0 do 9.x, motywem Classic i motywami pochodnymi.
- PHP 7.4 do 8.3.
- Multisklep i wielojęzyczność (FR/EN/ES/DE/IT/PL/NL/PT).
- Żaden CRON nie jest wymagany: włączanie i wyłączanie rabatu sterowane jest datami ceny specyficznej.
- Architektura zgodna z PrestaShop (ModuleAdminController, ObjectModel), autoloader PSR-4 bez zależności od Composera.

Rabat jest zapisywany w **cenie specyficznej**, której okno `from` / `to` odpowiada datom kampanii. PrestaShop sam ją aktywuje i wycofuje, co do sekundy.

## Instalacja

Zainstaluj moduł jak każdy inny moduł PrestaShop:

1. Pobierz archiwum `dfflashsale.zip` ze swojego konta klienta.
2. W zapleczu przejdź do **Moduły > Menedżer modułów**.
3. Kliknij **Załaduj moduł** i wskaż archiwum.
4. Po instalacji zarządzaj kampaniami z **Katalog > Wyprzedaże błyskawiczne**.

Przy instalacji moduł tworzy swoje tabele (kampanie, targetowania, mapowanie cen specyficznych), rejestruje hooki wyświetlania i dodaje zakładkę **Wyprzedaże błyskawiczne** pod Katalogiem.

## Ustawienia ogólne modułu

Strona konfiguracji (**Konfiguruj** z poziomu menedżera modułów) grupuje ustawienia globalne, wspólne dla wszystkich kampanii:

- **Synchronizuj licznik z serwerem**: opiera zegar na czasie serwera (zalecane). Zobacz dedykowaną sekcję.
- **Przesuń treść strony (push body)**: automatycznie dodaje margines, aby baner sticky nigdy nie zakrywał treści.
- **Pokaż baner na mobile**: włącza lub ukrywa baner na małych ekranach.
- **Z-index banera**: poziom warstwy banera, do zwiększenia, jeśli element Twojego motywu wyświetla się nad nim.

## Tworzenie kampanii wyprzedaży błyskawicznej

W zakładce **Katalog > Wyprzedaże błyskawiczne** kliknij **Dodaj kampanię**. Formularz jest podzielony na panele.

### Ogólne

- **Nazwa**: wewnętrzny identyfikator kampanii (dowolny).
- **Aktywna**: włącza lub wstrzymuje kampanię.
- **Data rozpoczęcia / zakończenia**: okno aktywności. Rabat i licznik opierają się na tych datach.
- **Priorytet**: jeśli kilka kampanii celuje w ten sam produkt, przy wyświetlaniu wygrywa ta o najwyższym priorytecie.
- **Sklepy**: w multisklepie wybierz sklepy, których dotyczy kampania.

### Rabat

- **Typ rabatu**: **Procent** (np. -30%) lub **Kwota stała** (np. -15 €).
- **Wartość**: procent lub kwota rabatu.
- **Waluta**: dla rabatu kwotowego waluta odniesienia.
- **Podatek**: określa, czy kwota stała jest rozumiana brutto czy netto.

Rabat jest stosowany przez ceny specyficzne: łączy się z natywnymi regułami cenowymi PrestaShop według ich priorytetu i jest widoczny już w koszyku.

### Targetowanie

Wybierz zakres kampanii:

- **Cały katalog**: rabat obejmuje wszystkie produkty.
- **Kategorie**: wybierz jedną lub kilka kategorii. Opcja **Uwzględnij podkategorie** rozszerza rabat na całe drzewo.
- **Produkty**: wyszukaj i wybierz konkretne produkty (wyszukiwanie po nazwie, indeksie lub identyfikatorze).
- **Marki**: wybierz jednego lub kilku producentów. Wszystkie ich produkty są uwzględniane automatycznie, również te dodane po utworzeniu kampanii.

### Wyświetlanie

- **Baner z licznikiem odliczającym**: wyświetla globalny pasek promocyjny.
- **Pozycja banera**: góra lub dół strony.
- **Baner przyklejony (sticky)**: utrzymuje baner widoczny podczas przewijania.
- **Pokaż na kartach produktów**: dodaje ramkę z licznikiem pod ceną.
- **Pokaż na stronie głównej**: dodaje blok promocyjny na stronie głównej.
- **Etykieta na zdjęciach produktów**: wyświetla nazwę kampanii na zdjęciu, na listach i na stronie produktu.
- **Teaser przed startem**: wyświetla licznik „start za…” przed datą rozpoczęcia.
- **Po zakończeniu odliczania**: ukryj element lub wyświetl komunikat końcowy.

### Wygląd i teksty

Panel **Wygląd** pozwala ustawić kolor tła, kolor tekstu i kolor akcentu, a także link przycisku wezwania do działania (CTA). Panel **Teksty** grupuje tłumaczalne etykiety: tytuł i podtytuł banera, tekst przycisku i komunikat końcowy, wprowadzane dla każdego języka sklepu.

## Jak działa planowanie

Gdy zapisujesz kampanię, moduł tworzy ceny specyficzne odpowiadające targetowaniu: globalną cenę specyficzną (produkt 0) dla „całego katalogu” albo cenę specyficzną per produkt dla targetowań po kategoriach i produktach. Okno ważności każdej ceny specyficznej jest dopasowane do dat rozpoczęcia i zakończenia kampanii.

PrestaShop sam włącza i wyłącza rabat, co do sekundy, bez zadania cyklicznego. Identyfikatory utworzonych cen specyficznych są zapamiętywane w tabeli mapowania, aby można je było czysto usunąć przy modyfikacji, usunięciu kampanii lub odinstalowaniu.

Przy targetowaniu po kategoriach z podkategoriami lista produktów jest wyznaczana przy zapisie przez przejście drzewa (nleft / nright). Pamiętaj o ponownym zapisaniu kampanii po reorganizacji kategorii.

## Licznik zsynchronizowany z serwerem

Licznik odliczający opiera się na czasie serwera, nie odwiedzającego. Przy wyświetleniu moduł przekazuje znacznik czasu serwera i datę zakończenia; skrypt oblicza przesunięcie między czasem serwera a czasem lokalnym, a następnie odlicza lokalnie na podstawie tego przesunięcia.

Efekt: odwiedzający, który przestawi zegar swojego komputera do przodu lub do tyłu, nie zafałszuje licznika. Nie są potrzebne powtarzane wywołania sieciowe, odliczanie pozostaje płynne i dokładne dla wszystkich.

Możesz wyłączyć synchronizację z serwerem w ustawieniach ogólnych; licznik oprze się wtedy na lokalnym czasie przeglądarki.

## Etykieta na zdjęciach produktów

Opcja **Etykieta na zdjęciach produktów** wyświetla nazwę promocji bezpośrednio na zdjęciu produktu, zarówno na listach kategorii, jak i na stronie produktu. To właściwe narzędzie, aby wizualnie oznaczyć nazwaną akcję, na przykład BLACK FRIDAY.

Treść etykiety wprowadza się w panelu **Teksty**, w polu **Tekst etykiety produktu**, dla każdego języka. Jeśli pozostanie puste, moduł użyje tytułu baneru. Kolor etykiety to kolor akcentu zdefiniowany dla kampanii.

Technicznie etykieta jest dodawana do natywnych _flag_ PrestaShop, tych samych, które wyświetlają już oznaczenia „Nowość” czy „-30%”. Jest więc pozycjonowana i stylowana przez Twój motyw, bez nadpisywania szablonu.

Etykieta pojawia się tylko w czasie trwania kampanii. W trybie teaser, przed datą rozpoczęcia, pozostaje ukryta, aby nie zapowiadać rabatu, który nie jest jeszcze stosowany.

## Obszar wyświetlania i rozmiar banera

Od wersji 1.2.0 dwa ustawienia w panelu **Wyświetlanie** określają, gdzie pojawia się baner i ile miejsca zajmuje. Ustawia się je osobno dla każdej kampanii.

### Wyświetlaj baner na

- **Cała witryna**: baner pojawia się na wszystkich stronach. To wartość domyślna, zachowana dla kampanii utworzonych przed wersją 1.2.0.
- **Strony objęte promocją**: karty wybranych produktów oraz strony wybranych kategorii lub marek. Kampania na cały katalog pozostaje widoczna wszędzie.
- **Tylko karty produktów w promocji**: baner pojawia się wyłącznie na karcie produktu objętego kampanią.

Na stronie, na której kampania o najwyższym priorytecie nie jest dozwolona, moduł przechodzi do kolejnej kampanii według priorytetu. Możesz więc zarezerwować baner dla jednej marki, a na reszcie witryny zostawić baner ogólny.

W kampanii skierowanej na produkty obszar „Strony objęte promocją” ogranicza się do kart tych produktów: strony kategorii, które je zawierają, nie wyświetlają banera.

### Rozmiar banera

- **Standardowy**: tytuł, podtytuł i licznik z etykietami (Dni, Godziny, Min, Sek). Około 56 px wysokości na komputerze.
- **Kompaktowy**: licznik bez etykiet w formacie `2d 14:05:33`. Około 35 px na komputerze i 55 px na telefonie, wobec 128 px w wersji Standardowej.
- **Mini (jedna linia)**: jednoliniowy pasek o wysokości około 26 px, podtytuł ukryty, a tytuł skracany, gdy brakuje miejsca. Najdyskretniejszy format na telefonie.

W trybach Kompaktowy i Mini jednostka dni znika, gdy zostało mniej niż 24 godziny.

## Tryb evergreen

Tryb **evergreen** zamienia kampanię w indywidualny, wieczny licznik: każdy odwiedzający ma własny termin, uruchamiany przy pierwszej wizycie i oparty na czasie trwania w minutach, który definiujesz. Termin jest przechowywany lokalnie (localStorage), aby pozostać spójnym między stronami i wizytami.

W trybie evergreen licznik jest indywidualny dla każdego odwiedzającego i nie odpowiada rzeczywistemu oknu rabatu. Używaj go do spersonalizowanych komunikatów pilności, a nie do sygnalizowania wspólnego końca promocji.

## Wielojęzyczność i multisklep

Wszystkie etykiety (tytuł, podtytuł, przycisk, komunikat końcowy) są tłumaczalne per język. W multisklepie każda kampania może być ograniczona do wybranych sklepów, a ceny specyficzne są tworzone per sklep. Ta sama kampania może więc celować w konkretny sklep bez wpływu na pozostałe.

## FAQ i rozwiązywanie problemów

### Rabat nie jest stosowany

Sprawdź, czy kampania jest **aktywna**, czy dzisiejsza data mieści się między datą rozpoczęcia a datą zakończenia i czy dotyczy bieżącego sklepu. Przy targetowaniu po kategoriach upewnij się, że kampania została ponownie zapisana po każdej reorganizacji drzewa.

### Baner zakrywa moje menu lub treść

Włącz opcję **Przesuń treść strony (push body)** w ustawieniach ogólnych. Jeśli element Twojego motywu wyświetla się nad banerem, zwiększ wartość **z-index**.

### Licznik pokazuje niespójny czas

Upewnij się, że czas Twojego serwera jest prawidłowy i że opcja synchronizacji z serwerem jest aktywna. Licznik opiera się na czasie serwera, niezależnie od zegara odwiedzającego.

### Kilka kampanii celuje w ten sam produkt

Przy wyświetlaniu wygrywa kampania o najwyższym **priorytecie**. Po stronie rabatu obowiązuje logika priorytetów cen specyficznych PrestaShop.

### Etykieta nie pojawia się na zdjęciach

Sprawdź najpierw, czy opcja **Etykieta na zdjęciach produktów** jest włączona w kampanii i czy data rozpoczęcia już minęła. Jeśli etykieta nadal się nie pojawia po wyczyszczeniu pamięci podręcznej, otwórz stronę konfiguracji modułu lub zakładkę **Katalog > Wyprzedaże błyskawiczne**: moduł sprawdzi wtedy swoje hooki i zarejestruje brakujące. Ten przypadek występuje po aktualizacji wykonanej przez zwykłe zastąpienie plików, która nie uruchamia skryptu aktualizacji.

### Co się dzieje przy odinstalowaniu?

Odinstalowanie usuwa wszystkie ceny specyficzne utworzone przez moduł na podstawie jego tabeli mapowania, usuwa hooki i zakładkę oraz czyści tabele modułu. Twoje pierwotne ceny są w całości przywracane.
