# Zapisane wyszukiwania i powiadomienia o nowych produktach: dokumentacja

> Kompletny przewodnik po module dfsavedsearch: instalacja, konfiguracja w panelu administracyjnym, harmonogram crona alertów, zgodność z RODO i rozwiązywanie problemów. PrestaShop 8 i 9.

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

## Przegląd

Moduł **Zapisane wyszukiwania i powiadomienia** (`dfsavedsearch`) pozwala klientom zapisać zestaw kryteriów wyszukiwania (słowa kluczowe, kategoria, producent, przedział cenowy, dostępność) i automatycznie otrzymać e-mail, gdy w sklepie pojawi się nowy pasujący produkt.

Przycisk zapisu pojawia się także wtedy, gdy wyszukiwanie nie znajduje żadnego produktu. To główny scenariusz: klient szuka artykułu, którego nie ma w katalogu, prosi o powiadomienie i wraca w dniu, w którym go opublikujesz. Dziennik antyduplikatów gwarantuje, że klient dostaje informacje tylko o produktach opublikowanych _po_ zapisaniu wyszukiwania i nigdy dwa razy o tym samym produkcie.

**W skrócie:** zapis wyszukiwania jednym kliknięciem na stronie wyników, dopasowanie słowo po słowie, filtr ceny brutto lub netto, powiadomienie e-mail z wyraźną zgodą, podsumowanie codzienne lub cotygodniowe wysyłane przez cron na Twoim serwerze.

## Instalacja

1. W panelu otwórz **Moduły > Menedżer modułów** i kliknij **Załaduj moduł**.
2. Wybierz archiwum `dfsavedsearch-1.1.0.zip` i potwierdź.
3. Podczas instalacji moduł tworzy dwie tabele SQL, kartę administracyjną i domyślną konfigurację. Token crona (32 znaki) jest generowany automatycznie.
4. Moduł działa od razu. Nie wymaga zewnętrznych zależności (ani Composera, ani frameworka).

**Aktualizacja do 1.1.0:** załaduj `dfsavedsearch-1.1.0.zip` na zainstalowaną wersję. Wyszukiwania, powiadomienia i ustawienia zostają zachowane. Skrypt aktualizacji dodaje kolumnę do obsługi crona, tłumaczy kartę administracyjną i czyści pamięć podręczną CSS/JS PrestaShop, aby serwować nowe pliki. Wersja 1.0.0 zawierała konflikt nazw klas, który uniemożliwiał instalację: jeśli próba się nie powiodła, usuń folder `modules/dfsavedsearch` przed załadowaniem 1.1.0.

Moduł działa z PrestaShop 8.0 do 9.x i PHP 8.1 do 8.5, w pojedynczym sklepie i w trybie multistore. Interfejs i e-maile są przetłumaczone na FR, EN, ES, DE, IT, NL, PL i PT.

## Konfiguracja (panel)

Przejdź do strony konfiguracji modułu (**Moduły > Menedżer modułów > dfsavedsearch > Konfiguruj**). Dostępne ustawienia:

- **Włącz moduł**: włącza lub wstrzymuje wyświetlanie przycisku i wysyłkę powiadomień.
- **Maks. produktów w e-mailu**: maksymalna liczba produktów w jednym e-mailu (domyślnie 12).
- **Maks. zapisanych wyszukiwań na klienta**: maksymalna liczba wyszukiwań, które klient może zapisać (domyślnie 20).
- **Domyślna częstotliwość powiadomień**: codziennie lub co tydzień, dla nowych wyszukiwań.
- **Filtry cen z VAT**: « Tak » porównuje ceny min./maks. wpisane przez klienta z ceną regularną brutto, liczoną według stawki VAT kraju domyślnego. « Nie » porównuje z ceną netto, co pasuje do B2B. Przy instalacji ustawienie przyjmuje sposób wyświetlania cen domyślnej grupy klientów. Promocje nie są uwzględniane. Gdy podatki są wyłączone w sklepie, porównanie zawsze odbywa się na cenach netto.
- **Token crona**: wyświetlany jawnie, z przyciskiem ponownego wygenerowania. Pełny adres URL crona i data ostatniego uruchomienia są pokazane w osobnym panelu.

Wartości są zapisywane w zmiennych konfiguracyjnych `DFSAVEDSEARCH_ENABLED`, `DFSAVEDSEARCH_MAX_PRODUCTS`, `DFSAVEDSEARCH_MAX_PER_CUST`, `DFSAVEDSEARCH_DEFAULT_FREQ`, `DFSAVEDSEARCH_PRICE_TAX`, `DFSAVEDSEARCH_CRON_TOKEN` i `DFSAVEDSEARCH_LAST_CRON`.

![Ustawienia modułu: adres URL crona, produkty w e-mailu, wyszukiwania na klienta, domyślna częstotliwość i filtry cen brutto](https://www.datafirefly.com/wp-content/uploads/2026/10/konfiguracja-modulu-cron-podsumowanie-email-dfsavedsearch-pl.webp)

Ustawienia modułu: adres URL crona, produkty w e-mailu, wyszukiwania na klienta, domyślna częstotliwość i filtry cen brutto

## Korzystanie przez klienta

Na stronie wyników wyszukiwania automatycznie pojawia się przycisk **« Zapisz to wyszukiwanie »**, niezależnie od liczby wyników. Po kliknięciu klient otwiera okno, w którym może:

- nazwać wyszukiwanie;
- doprecyzować kryteria: słowa kluczowe, kategoria (z podkategoriami), producent, cena minimalna i maksymalna (z oznaczeniem brutto lub netto), tylko dostępne produkty;
- opcjonalnie włączyć powiadomienie e-mail i wybrać jego częstotliwość.

Powiadomienie e-mail wymaga zaznaczenia pola **wyraźnej zgody, domyślnie odznaczonego**, z jasną treścią zgody. Niezalogowany odwiedzający jest proszony o zalogowanie, a potem wraca do swojego wyszukiwania.

![Strona wyników wyszukiwania z przyciskiem „Zapisz to wyszukiwanie” nad listą produktów](https://www.datafirefly.com/wp-content/uploads/2026/10/przycisk-zapisz-wyszukiwanie-wyniki-dfsavedsearch-pl.webp)

Strona wyników wyszukiwania z przyciskiem „Zapisz to wyszukiwanie” nad listą produktów

![Formularz „Zapisz to wyszukiwanie”: nazwa, fraza, kategoria, marka, zakres cen, tylko dostępne produkty i zgoda na powiadomienia e-mail z częstotliwością](https://www.datafirefly.com/wp-content/uploads/2026/10/formularz-zapisanego-wyszukiwania-powiadomienie-email-dfsavedsearch-pl.webp)

Formularz „Zapisz to wyszukiwanie”: nazwa, fraza, kategoria, marka, zakres cen, tylko dostępne produkty i zgoda na powiadomienia e-mail z częstotliwością

![Potwierdzenie po zapisaniu: klient otrzyma e-mail, gdy pojawią się nowe pasujące produkty](https://www.datafirefly.com/wp-content/uploads/2026/10/potwierdzenie-zapisania-wyszukiwania-dfsavedsearch-pl.webp)

Potwierdzenie po zapisaniu: klient otrzyma e-mail, gdy pojawią się nowe pasujące produkty

![Wyszukiwanie bez wyników: klient może je zapisać, aby otrzymać powiadomienie o pojawieniu się produktu](https://www.datafirefly.com/wp-content/uploads/2026/10/brak-wynikow-zapisz-wyszukiwanie-powiadomienie-dfsavedsearch-pl.webp)

Wyszukiwanie bez wyników: klient może je zapisać, aby otrzymać powiadomienie o pojawieniu się produktu

### Jak wyszukiwane są produkty

Moduł dzieli wyszukiwanie na słowa (minimum dwa znaki, maksymalnie osiem słów). Każde słowo musi wystąpić w nazwie, krótkim opisie lub indeksie produktu, w dowolnej kolejności. Wielkość liter i znaki diakrytyczne są ignorowane. Wyszukiwanie „nike pegasus 41” znajdzie więc „Nike Air Zoom Pegasus 41”, ale nie „Pegasus Trail”, który nie zawiera słowa „nike”.

Produkt jest brany pod uwagę, jeśli jest aktywny w sklepie, widoczny w wyszukiwaniu (widoczność « Wszędzie » lub « Tylko wyszukiwanie ») i ma nazwę w języku, którego klient używał przy zapisie. Cron czyta katalog bezpośrednio: produkt utworzony w panelu, przez webservice, import CSV lub ERP wywołuje powiadomienie w ten sam sposób. Produkt, który zaczyna pasować później (aktywowany, przemianowany, ponownie dostępny), także wywołuje powiadomienie, jeden raz.

## Sekcja « Moje zapisane wyszukiwania »

Hook `displayCustomerAccount` dodaje do konta klienta pozycję **« Moje zapisane wyszukiwania »**. Klient znajdzie tam wszystkie zapisane wyszukiwania i dla każdego może:

- włączyć lub wyłączyć powiadomienie e-mail;
- zmienić częstotliwość (codziennie lub co tydzień);
- usunąć wyszukiwanie.

Kryteria każdego wyszukiwania są pokazane jako czytelne etykiety (kategoria, producent, przedział cen brutto lub netto, dostępne).

Od wersji 1.1.0 nazwa każdego wyszukiwania jest linkiem, który je ponownie uruchamia, kwoty są wyświetlane w walucie sklepu, a na telefonie lista ma postać kart. W motywie Hummingbird, domyślnym w PrestaShop 9, pozycja wpisuje się w pulpit i menu konta, z zaznaczeniem aktywnej strony. Jeśli klient zapisze drugi raz dokładnie to samo wyszukiwanie, zostanie ono zaktualizowane zamiast zduplikowane.

![Moje konto: link „Moje zapisane wyszukiwania” na pulpicie i w menu konta](https://www.datafirefly.com/wp-content/uploads/2026/10/link-moje-zapisane-wyszukiwania-konto-dfsavedsearch-pl.webp)

Moje konto: link „Moje zapisane wyszukiwania” na pulpicie i w menu konta

![Strona „Moje zapisane wyszukiwania”: kryteria, powiadomienie e-mail włączone lub nie, częstotliwość, ostatnia wysyłka i usuwanie](https://www.datafirefly.com/wp-content/uploads/2026/10/moje-zapisane-wyszukiwania-konto-klienta-dfsavedsearch-pl.webp)

Strona „Moje zapisane wyszukiwania”: kryteria, powiadomienie e-mail włączone lub nie, częstotliwość, ostatnia wysyłka i usuwanie

![Widok mobilny: każde zapisane wyszukiwanie jest wyświetlane jako karta](https://www.datafirefly.com/wp-content/uploads/2026/10/zapisane-wyszukiwania-widok-mobilny-dfsavedsearch-pl.webp)

Widok mobilny: każde zapisane wyszukiwanie jest wyświetlane jako karta

## Planowanie crona (wysyłka powiadomień)

Wysyłką e-maili steruje zadanie cron chronione tokenem. Skonfiguruj harmonogram zadań serwera (lub usługę cron), aby wywoływał adres:

```
https://twoj-sklep.pl/index.php?fc=module&module=dfsavedsearch&controller=cron&token=TWOJ_TOKEN
```

Zastąp `TWOJ_TOKEN` tokenem widocznym w konfiguracji modułu.

**Zalecana częstotliwość:** wywołuj adres **co godzinę**. Moduł respektuje potem częstotliwość każdego wyszukiwania (codziennie lub co tydzień): data ostatniej wysyłki jest aktualizowana tylko wtedy, gdy e-mail faktycznie wysłano.

Przetwarzanie odbywa się partiami po 200 wyszukiwań, po kolei: wyszukiwanie bez nowości wraca na koniec kolejki, więc wszystkie są sprawdzane nawet powyżej 200 aktywnych powiadomień. Blokada uniemożliwia dwóm równoczesnym uruchomieniom podwójne wysłanie tego samego e-maila. Wynik crona podaje liczbę przetworzonych wyszukiwań, wysłanych e-maili i ewentualnych błędów, zapisywanych w logach PrestaShop. E-mail, jego temat i format cen są w języku klienta.

Chroń token crona. W razie wycieku wygeneruj go ponownie jednym kliknięciem w konfiguracji: stary adres przestanie działać.

![E-mail z nowymi produktami pasującymi do zapisanego wyszukiwania, ze zdjęciami, cenami i linkiem do wypisania](https://www.datafirefly.com/wp-content/uploads/2026/10/email-powiadomienie-nowe-produkty-dfsavedsearch-pl.webp)

E-mail z nowymi produktami pasującymi do zapisanego wyszukiwania, ze zdjęciami, cenami i linkiem do wypisania

### Lista wyszukiwań w panelu administracyjnym

Menu **Klienci > Zapisane wyszukiwania** pokazuje wszystkie wyszukiwania: klient, nazwa i fraza, kryteria (kategoria, marka, cena, dostępność), język wysyłki, powiadomienie i częstotliwość, liczba produktów już zgłoszonych i data ostatniej wysyłki. Panel przypomina adres URL crona z przyciskiem « Uruchom teraz ». Listę można wyeksportować do CSV i usuwać wiele pozycji naraz.

![Lista zapisanych wyszukiwań w panelu administracyjnym: klient, kryteria, język, powiadomienia i adres URL crona](https://www.datafirefly.com/wp-content/uploads/2026/10/lista-zapisanych-wyszukiwan-panel-administracyjny-dfsavedsearch-pl.webp)

Lista zapisanych wyszukiwań w panelu administracyjnym: klient, kryteria, język, powiadomienia i adres URL crona

## Zgodność z RODO

- **Wyraźna zgoda**: powiadomienie e-mail nigdy nie jest włączane bez świadomego działania klienta (pole domyślnie odznaczone).
- **Wypisanie jednym kliknięciem**: każdy e-mail zawiera podpisany link, który wyłącza powiadomienie bez logowania.
- **Eksport i usuwanie**: moduł korzysta z hooków RODO PrestaShop (psgdpr) do eksportu i usuwania danych osobowych.
- **Automatyczne czyszczenie**: po usunięciu konta klienta wszystkie jego zapisane wyszukiwania są usuwane.

![Strona wypisania jednym kliknięciem z e-maila, bez logowania](https://www.datafirefly.com/wp-content/uploads/2026/10/wypisanie-z-powiadomien-jednym-kliknieciem-dfsavedsearch-pl.webp)

Strona wypisania jednym kliknięciem z e-maila, bez logowania

## Motywy i kompatybilność

Nie trzeba modyfikować szablonów. Przycisk i okno są generowane przez standardowy hook `displayFooter`, a następnie przycisk trafia tuż nad `#js-product-list-top`. Jeśli tego bloku nie ma, moduł próbuje `#main .page-header`, `#main h1`, a potem początku `#main`. Przycisk pozostaje na miejscu po sortowaniu lub filtrowaniu fasetowym AJAX.

- PrestaShop 8.0 do 9.x, PHP 8.1 do 8.5, multistore. Przetestowano z motywami Classic i Hummingbird.
- Fraza wyszukiwania jest odczytywana z `s`, a w razie braku z historycznego parametru `search_query`.
- Używane hooki: `displayCustomerAccount`, `actionFrontControllerSetMedia`, `displayFooter`, `actionObjectCustomerDeleteAfter`, `actionDeleteGDPRCustomer`, `actionExportGDPRData`.
- Karta administracyjna `AdminDfSavedSearch` w menu Klienci.
- Bez zależności: ręczny autoloader PSR-4, czysty JS, bez usług zewnętrznych.

Stopki tworzone w page builderze, które nie wywołują `displayFooter`, nie są obsługiwane: wtedy przycisk się nie pojawia.

## Rozwiązywanie problemów

- **Żaden e-mail nie jest wysyłany**: sprawdź, czy cron jest wywoływany (data ostatniego uruchomienia w konfiguracji), czy moduł jest włączony i czy konfiguracja e-mail PrestaShop działa.
- **Przycisk się nie pojawia**: jest widoczny tylko na stronie wyników wyszukiwania. Sprawdź, czy moduł jest włączony i czy motyw wywołuje `displayFooter`, a następnie wyczyść pamięć podręczną PrestaShop.
- **Klient nie dostaje powiadomień**: sprawdź, czy powiadomienie jest włączone dla tego wyszukiwania, czy każde słowo występuje w nazwie, krótkim opisie lub indeksie nowego produktu i czy produkt opublikowano po zapisaniu wyszukiwania.
- **Filtr ceny wydaje się przesunięty**: sprawdź ustawienie « Filtry cen z VAT ». Porównywana jest cena regularna, bez promocji.

## Historia wersji

- **1.1.0** (29 października 2026): okno zapisu i link « Moje zapisane wyszukiwania » dostosowane do motywu Hummingbird PrestaShop 9, style ładowane na stronie konta, ceny w e-mailu w formacie języka klienta, cron po kolei z blokadą przed podwójną wysyłką, identyczne wyszukiwania scalane, klikalna nazwa do ponownego wyszukania, ceny z walutą, widok kart na telefonie, lista w panelu z kryteriami i językiem, karta przetłumaczona na 8 języków, strona wypisania nieindeksowana, poprawki wyświetlania w Classic.
- **1.0.1** (27 października 2026): poprawka konfliktu nazw klas blokującego instalację, dopasowanie słowo po słowie, filtr ceny brutto lub netto, przycisk stabilny po sortowaniu lub filtrowaniu AJAX, obsługa `search_query`, tłumaczenia na 8 języków z tematem e-maila w języku klienta, sprawdzone na PHP 8.3 i 8.4.
- **1.0.0** (15 lipca 2026): pierwsza wersja.
