dfsavecart: zapis koszyka magicznym linkiem
Instalacja, konfiguracja i użytkowanie modułu zapisu koszyka magicznym linkiem dla PrestaShop 8 i 9.
Prezentacja
dfsavecart dodaje funkcję „Zachowaj na później” na stronie koszyka Twojego sklepu PrestaShop 8 albo 9. Odwiedzający, zalogowany albo gość, podaje swój adres e-mail i otrzymuje bezpieczny link („magiczny link”), który odtwarza jego dokładny koszyk: te same produkty, te same ilości, na dowolnym urządzeniu, w dowolnym momencie w skonfigurowanym okresie ważności.
Moduł jest nieinwazyjny: nie wpływa na ścieżkę zamówienia, checkout ani inne moduły. Działa z natywnym systemem e-mail PrestaShop, a więc z Twoim istniejącym SMTP.
Wymagania
- PrestaShop 8.0.x do 9.x
- PHP 8.1 albo nowsze
- MySQL 5.7+ albo MariaDB 10.3+
- Działająca wysyłka e-mail (Parametry zaawansowane > E-mail: przetestuj wysyłkę przed instalacją modułu)
Instalacja
- Pobierz plik
dfsavecart.zipze swojego konta DataFirefly. - W back office PrestaShop przejdź do Moduły > Menedżer modułów.
- Kliknij Wgraj moduł i wybierz plik ZIP.
- PrestaShop instaluje moduł automatycznie: tworzona jest tabela
ps_df_savecart, a hooki zostają zarejestrowane. - Kliknij Konfiguruj, aby przejść do ustawień.
Nie jest instalowany żaden override klasy ani kontrolera: deinstalacja jest czysta i nie zostawia śladów (tabela i konfiguracje są usuwane).
Konfiguracja
Wszystkie ustawienia mieszczą się na jednej stronie: Moduły > Menedżer modułów > dfsavecart > Konfiguruj.
Ustawienia główne
- Włącz moduł: wyłącznik ogólny. Po wyłączeniu blok znika z frontu bez deinstalacji modułu.
- Pozycja przycisku: Stopka koszyka (zalecane, hook
displayShoppingCartFooter), Wewnątrz koszyka (hookdisplayShoppingCart) albo Oba miejsca. Wybór zależy od Twojego motywu: po zmianie sprawdź render na stronie koszyka. - Czas ważności linku: od 1 do 365 dni, domyślnie 30. Po tym czasie link wygasa, a wpis jest usuwany.
Bezpieczeństwo i ochrona przed spamem
- Limit na adres e-mail dziennie: maksymalna liczba wysyłek na ten sam adres w ruchomym oknie 24 h (domyślnie 10). Wpisz 0, aby wyłączyć. Licznik opiera się na solonym hashu adresu: adres nie jest przechowywany jawnie na potrzeby tej funkcji.
- Link jednorazowy: po włączeniu link staje się nieważny po pierwszym odtworzeniu. Przydatne przy koszykach o charakterze poufnym (B2B, oferty).
Zachowanie przy odtwarzaniu
- Opróżnij bieżący koszyk przed odtworzeniem: włączone domyślnie. Po wyłączeniu produkty z linku dopisują się do bieżącego koszyka (kumulacja).
RODO i e-mail
- Wymagaj zgody RODO: wyświetla obowiązkowe pole wyboru przed wysyłką (włączone domyślnie, zalecane).
- Wyślij kopię ukrytą do sprzedawcy: dodaje adres kontaktowy sklepu w polu BCC przy każdej wysyłce, na potrzeby wewnętrznego śledzenia.
- Temat e-maila (per język): konfigurowalny dla każdego aktywnego języka sklepu. Dostępne zmienne:
{shop_name}i{firstname}.
Działanie po stronie klienta
- Klient dodaje produkty do koszyka i otwiera stronę koszyka.
- Widzi blok „Zachowaj ten koszyk na później” z polem e-mail (wypełnionym automatycznie, jeśli jest zalogowany).
- Podaje adres e-mail, zaznacza zgodę, jeśli jest wymagana, i klika Wyślij link.
- Otrzymuje e-mail z podsumowaniem koszyka (produkty, ilości, szacowana suma), datą wygaśnięcia i przyciskiem Odtwórz mój koszyk.
- Kliknięcie przycisku odtwarza dokładny koszyk i przekierowuje na stronę koszyka z komunikatem potwierdzającym.
Przypadki szczególne przy odtwarzaniu
- Produkt wyłączony albo usunięty: pozycja jest pomijana, a klient dostaje komunikat z listą niedostępnych produktów.
- Niewystarczający stan magazynowy: ilość jest korygowana do dostępnego maksimum, z komunikatem informującym o korekcie.
- Link wygasły albo już użyty (tryb jednorazowy): wyświetla się prosta strona błędu z odnośnikami do bieżącego koszyka i strony głównej.
- Język i waluta: odtwarzane są te z pierwotnego koszyka.
E-maile
Szablony HTML i tekstowe są dostarczane po francusku, angielsku, hiszpańsku i niemiecku w modules/dfsavecart/mails/{iso}/savecart.html oraz savecart.txt. Używany jest język koszyka z momentu zapisu.
Zmienne dostępne w szablonach: {firstname}, {shop_name}, {restore_link}, {cart_items_html}, {cart_items_txt}, {cart_total}, {expiry_date}.
Aby personalizacja szablonów przetrwała aktualizacje, skopiuj je do katalogu mails swojego motywu, zamiast modyfikować te dostarczone z modułem: te zostaną nadpisane przy aktualizacji.
Bezpieczeństwo
- Token 256-bitowy: generowany przez
random_bytes(32), kryptograficznie bezpieczny generator PHP. 64 znaki szesnastkowe w adresie URL. - Przechowywanie w postaci hasha: w bazie zapisywany jest wyłącznie odcisk SHA-256 tokenu. W razie naruszenia bazy danych nie da się odtworzyć żadnego linku.
- CSRF: endpoint AJAX zapisu weryfikuje token sesji PrestaShop.
- Ścisła walidacja: format tokenu jest sprawdzany po stronie serwera (
[a-f0-9]{64}) przed jakimkolwiek zapytaniem do bazy.
RODO
- Jawna zgoda przed wysłaniem e-maila, konfigurowalna.
- Na potrzeby limitu antyspamowego adres e-mail nie jest przechowywany jawnie: używany jest wyłącznie solony hash (z sekretnym kluczem sklepu).
- Wygasłe wpisy są usuwane automatycznie (czyszczenie): patrz sekcja poniżej.
- Żadne dane nie są przekazywane usługom zewnętrznym: wszystko zostaje w Twojej bazie PrestaShop.
- W razie żądania usunięcia danych przez klienta usuń jego wiersze z tabeli
ps_df_savecart(kolumnaemail).
Czyszczenie wygasłych linków
Trzy możliwości, od najprostszej do najbardziej zautomatyzowanej:
- Przycisk ręczny: na stronie konfiguracji modułu, „Wyczyść wygasłe wpisy”.
- Moduł CronJobs: zainstaluj bezpłatny moduł CronJobs od PrestaShop: hook
actionCronJobmodułu jest wywoływany automatycznie i uruchamia czyszczenie. - Systemowy crontab: zaplanuj regularne wywołanie crona swojego sklepu zgodnie z konfiguracją serwera.
Statystyki
Strona konfiguracji pokazuje cztery liczniki w czasie rzeczywistym: łącznie zapisanych, aktywnych (niewygasłych), wygasłych (oczekujących na wyczyszczenie) i odtworzonych (linki użyte co najmniej raz). Stosunek odtworzonych do łącznej liczby daje współczynnik konwersji tej funkcji.
Multistore
Moduł jest zgodny z multistore: każdy zapis zapamiętuje identyfikator sklepu źródłowego, używany przy odtwarzaniu. Konfiguracja odbywa się w standardowym kontekście sklepu PrestaShop.
Rozwiązywanie problemów
E-mail nie dociera
- Sprawdź globalną wysyłkę e-mail sklepu: Parametry zaawansowane > E-mail > Przetestuj wysyłkę.
- Sprawdź folder spam u odbiorcy.
- Zajrzyj do logów: Parametry zaawansowane > Logi (błędy modułu mają prefiks
[dfsavecart]).
Blok nie pojawia się na stronie koszyka
- Sprawdź, czy moduł jest włączony w swojej konfiguracji.
- Sprawdź, czy koszyk zawiera przynajmniej jeden produkt (przy pustym koszyku blok jest ukrywany).
- Sprawdź wybraną pozycję: niektóre motywy nie implementują hooka
displayShoppingCartFooter, przełącz się wtedy na „Wewnątrz koszyka” albo „Oba miejsca”. - Wyczyść cache: Parametry zaawansowane > Wydajność > Wyczyść cache.
Komunikat „Nieprawidłowy token bezpieczeństwa”
- Strona koszyka pozostawała otwarta zbyt długo i sesja wygasła: odśwież stronę i spróbuj ponownie.
Komunikat „Zbyt wiele żądań dla tego adresu”
- Dzienny limit antyspamowy dla tego adresu został osiągnięty. Zwiększ limit w konfiguracji albo odczekaj 24 h.
Deinstalacja
Deinstalacja usuwa tabelę ps_df_savecart (wszystkie zapisane koszyki przepadają) oraz wszystkie klucze konfiguracji. W bazie ani w plikach nie zostają żadne resztki.