# DF Recently Viewed: ostatnio oglądane produkty (PrestaShop 8/9)

> Wprowadzenie DF Recently Viewed (dfrecentlyviewed) wyświetla produkty ostatnio oglądane przez odwiedzających, ale w architekturze pomyślanej pod konwersję: historia jest przechowywana po stronie serwera, scalana z kontem klienta przy logowaniu, renderowana…

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

## Wprowadzenie

DF Recently Viewed (`dfrecentlyviewed`) wyświetla produkty ostatnio oglądane przez odwiedzających, ale w architekturze pomyślanej pod konwersję: historia jest przechowywana po stronie serwera, scalana z kontem klienta przy logowaniu, renderowana przez AJAX, aby pozostawała poprawna za cache strony, i wzbogacona o plakietki spadku ceny. Całość uzupełnia pulpit analityczny ze wskaźnikiem konwersji z odsłony na zakup.

### Wymagania

- PrestaShop 8.0 do 9.x
- PHP 7.4 do 8.3
- Brak zależności zewnętrznych (ani Composer, ani jQuery, ani biblioteka karuzeli)

## Instalacja

1. W panelu administracyjnym otwórz **Moduły > Menedżer modułów**.
2. Kliknij **Wgraj moduł**, a następnie wskaż plik `dfrecentlyviewed.zip`.
3. Kliknij **Zainstaluj**. Moduł tworzy swoją tabelę, rejestruje hooki i dodaje zakładkę **Katalog > Statystyki oglądanych produktów**.
4. Kliknij **Konfiguruj**, aby przejść do ustawień.

Moduł działa od razu po instalacji z sensownymi ustawieniami domyślnymi: 8 produktów, karuzela, renderowanie AJAX, włączone plakietki spadku ceny, retencja 90 dni.

## Konfiguracja

### Zakładka Wyświetlanie

- **Tytuł bloku**: tłumaczony na każdy z Twoich języków.
- **Liczba produktów**: od 1 do 24 produktów wyświetlanych w bloku.
- **Układ karuzeli**: włączony daje poziomą karuzelę ze strzałkami nawigacji, wyłączony daje responsywną siatkę.
- **Pokazuj na kartach produktu**: hook `displayFooterProduct`.
- **Pokazuj na stronie głównej**: hook `displayHome`.
- **Pokazuj na stronie koszyka**: hook `displayShoppingCartFooter`.
- **Pokazuj link „wyczyść moją historię"**: zalecane dla przejrzystości wobec RODO.

### Zakładka Inteligentne zachowanie

- **Wyklucz aktualnie wyświetlany produkt**: unika polecania karty, która jest już na ekranie.
- **Ukryj produkty niedostępne**: filtr uwzględnia dozwolone przedsprzedaże.
- **Ukryj produkty już w koszyku**: koszyk jest przeliczany po stronie serwera, nigdy na podstawie strony z cache.
- **Plakietki spadku ceny**: wyświetlają plakietkę „-X %", gdy cena spadła od ostatniego obejrzenia przez danego odwiedzającego.
- **Renderowanie AJAX (zgodne z cache)**: mocno zalecane, patrz osobna sekcja poniżej.
- **Retencja historii (dni)**: od 1 do 730 dni. Starsze odsłony są czyszczone automatycznie.

## Zgodność z full page cache

W sklepie z Varnishem, Cloudflare, LiteSpeed Cache lub CDN blok spersonalizowany i renderowany po stronie serwera trafia do cache razem ze stroną: kolejny odwiedzający widzi cudzą historię albo pusty blok.

Tryb **Renderowanie AJAX**, włączony domyślnie, rozwiązuje ten problem: blok jest wstrzykiwany po wyrenderowaniu strony, zapytaniem do kontrolera front modułu. Śledzenie odsłony produktu wychodzi natomiast nieblokującym _beaconem_, który działa również wtedy, gdy strona pochodzi z cache.

Wyłącz tryb AJAX tylko wtedy, gdy Twój sklep nie używa żadnego cache stron. W przeciwnym razie blok będzie pokazywał nieprawidłowe dane.

## Plakietki spadku ceny

Przy każdym obejrzeniu karty produktu moduł zapisuje cenę brutto wyświetloną w tym momencie temu konkretnemu odwiedzającemu. Przy wyświetlaniu bloku porównuje tę zapamiętaną cenę z ceną bieżącą:

- Jeżeli cena spadła o co najmniej 1 %, w lewym górnym rogu miniatury pojawia się czerwona plakietka „↓ -X %".
- Zapamiętana cena jest aktualizowana przy każdym kolejnym obejrzeniu: plakietka zawsze oznacza więc „cena spadła od Twojej ostatniej wizyty na tej karcie".
- Jeżeli cena wraca w górę, plakietka znika.

## Historia między urządzeniami

Odsłony są zapisywane z identyfikatorem gościa (`id_guest`) dla odwiedzających anonimowych i z identyfikatorem klienta (`id_customer`) dla zalogowanych.

W momencie logowania (hook `actionAuthentication`) historia gościa jest scalana z kontem klienta: liczniki odsłon są sumowane, a zachowywana jest najpóźniejsza data ostatniego obejrzenia. Klient odnajduje w ten sposób oglądane produkty na wszystkich swoich urządzeniach.

## Strona „Moja historia przeglądania"

Moduł dodaje kafelek w strefie klienta (hook `displayCustomerAccount`) prowadzący do dedykowanej strony, która wyświetla do 48 oglądanych produktów, z przyciskiem czyszczenia, jeżeli opcja jest włączona.

Adres strony: `/module/dfrecentlyviewed/history` (przepisywany zgodnie z Twoją konfiguracją adresów URL).

## Widget

Blok można wywołać z dowolnego szablonu Twojego motywu:

```
{widget name='dfrecentlyviewed'}
{widget name='dfrecentlyviewed' limit=6}
```

Parametr `limit` jest opcjonalny i ograniczony do 24. Bez niego obowiązuje liczba ustawiona w panelu administracyjnym.

## Pulpit analityczny

Przejdź do **Katalog > Statystyki oglądanych produktów**. Znajdziesz tam, w okresie 7, 30, 90 lub 365 dni:

- **Odsłony produktów**: łączna liczba zarejestrowanych wyświetleń.
- **Liczba różnych oglądanych produktów**: rzeczywisty zasięg odkrywania katalogu.
- **Unikalni odwiedzający**: goście i klienci łącznie.
- **Konwersja z odsłony na zakup**: odsetek par klient/produkt, które doprowadziły do prawidłowego zamówienia złożonego po obejrzeniu. Liczona wyłącznie na zalogowanych klientach.
- **Najczęściej oglądane produkty**: ranking z bezpośrednim linkiem do karty produktu w panelu.

## RODO i retencja

### Hooki psgdpr

Moduł implementuje `actionExportGDPRData` i `actionDeleteGDPRCustomer`: jeżeli oficjalny moduł psgdpr jest zainstalowany, historia przeglądania jest uwzględniana w eksportach i w usuwaniu danych osobowych na żądanie Twoich klientów.

### Samodzielne czyszczenie

Gdy opcja jest włączona, obok tytułu bloku i na stronie historii pojawia się link „Wyczyść moją historię". Odwiedzający może sam usunąć swoje dane, po potwierdzeniu.

### Automatyczne czyszczenie

Odsłony starsze niż ustawiony okres retencji są usuwane automatycznie, w sposób oportunistyczny (przy około 1 % zapisywanych odsłon). Żadna konfiguracja nie jest potrzebna.

### Opcjonalny CRON

Dla sklepów o dużym ruchu na stronie konfiguracji wyświetlany jest adres czyszczenia zabezpieczony tokenem. Możesz wywoływać go codziennie:

```
0 4 * * * curl -s "https://twoj-sklep.pl/module/dfrecentlyviewed/tracking?action=cleanup&token=TWOJ_TOKEN"
```

## Integracja z motywem

Produkty są renderowane przez natywną miniaturę Twojego motywu (`catalog/_partials/miniatures/product.tpl`). Blok dziedziczy więc automatycznie wygląd Twoich list produktowych: zdjęcie, nazwa, cena, plakietki promocji, przycisk szybkiego dodania, jeżeli Twój motyw taki oferuje.

Jeżeli chcesz dostosować kontener, nadpisz szablony modułu z poziomu swojego motywu:

```
themes/twoj-motyw/modules/dfrecentlyviewed/views/templates/hook/recentlyviewed.tpl
themes/twoj-motyw/modules/dfrecentlyviewed/views/templates/hook/_products.tpl
```

## Tryb wielosklepowy

Historie są rozdzielone per sklep: odwiedzający, który obejrzał produkt w sklepie A, nie zobaczy go w sklepie B. Wszystkie ustawienia są zapisywane przez tabelę Configuration PrestaShop, z natywną obsługą trybu wielosklepowego.

## Deinstalacja

Deinstalacja usuwa tabelę historii, wszystkie ustawienia i zakładkę statystyk. Przed operacją wymagane jest potwierdzenie.

## Rozwiązywanie problemów

### Blok się nie pojawia

- Sprawdź, czy hook odpowiadający danej stronie jest włączony w konfiguracji (karta produktu, strona główna, koszyk).
- Blok wyświetla się tylko wtedy, gdy odwiedzający obejrzał co najmniej jeden kwalifikujący się produkt. Odwiedzający, który trafia do sklepu po raz pierwszy, nie zobaczy nic.
- Jeżeli wykluczenie bieżącego produktu i wykluczenie koszyka są włączone jednocześnie, może się zdarzyć, że nie zostanie żaden produkt do wyświetlenia.

### Blok pozostaje pusty na stronie z cache

Upewnij się, że tryb **Renderowanie AJAX** jest włączony. Sprawdź także, czy Twoja konfiguracja cache nie przechwytuje zapytań do `/module/dfrecentlyviewed/tracking`.

### Plakietki spadku ceny nigdy się nie pokazują

Plakietka może się pojawić tylko wtedy, gdy odwiedzający obejrzał produkt _przed_ spadkiem ceny. Po zmianie cennika daj odwiedzającym czas na powrót. Sprawdź także, czy opcja jest rzeczywiście włączona.
