Odbiór w sklepie (Store Pickup): kompletny przewodnik
Instalacja, konfiguracja i obsługa odbioru w sklepie: dedykowany przewoźnik, wybór punktu odbioru na interaktywnej mapie (Leaflet/OpenStreetMap, bez klucza API), zarządzanie sklepami i śledzenie zamówienia w PrestaShop 8 i 9.
Wprowadzenie
Moduł Odbiór w sklepie (datafireflystorepickup) pozwala Twoim klientom odebrać zamówienie w jednym z Twoich punktów sprzedaży zamiast korzystać z dostawy. Przy instalacji automatycznie tworzony jest przewoźnik „Odbiór w sklepie”. W checkoucie, gdy klient wybierze tego przewoźnika, pojawia się lista sklepów i interaktywna mapa: klient wskazuje swój punkt odbioru, a wybór jest zapisywany razem z zamówieniem.
Mapa opiera się na Leaflet i OpenStreetMap, bez konieczności podawania jakiegokolwiek klucza API. Moduł jest zgodny z PrestaShop 8.x i 9.x i korzysta wyłącznie z natywnych hooków, bez nadpisywania rdzenia.
Instalacja
- Spakuj katalog
datafireflystorepickup(archiwum musi zawierać sam katalog, a nie tylko jego zawartość). - W panelu administracyjnym otwórz Moduły > Menedżer modułów, kliknij Zainstaluj moduł i wgraj archiwum ZIP.
- Po zakończeniu instalacji kliknij Konfiguruj.
Przy instalacji moduł wykonuje automatycznie następujące operacje: tworzy przewoźnika „Odbiór w sklepie” (wraz z przedziałami ceny i wagi, wszystkimi strefami i grupami klientów), tworzy tabele danych, rejestruje hooki i ustawia opłatę za odbiór na 0.
Przewoźnik jest identyfikowany przez swoją referencję (id_reference), a nie tylko przez identyfikator: możesz go swobodnie zmieniać w Transport > Przewoźnicy (nazwa, czas dostawy, logo, strefy), nie zrywając powiązania z modułem.
Konfiguracja
Przejdź do Moduły > Odbiór w sklepie > Konfiguruj. Strona łączy ustawienia ogólne i zarządzanie sklepami.
Opłata za odbiór
Pole Opłata za odbiór (netto) określa koszt przypisany do przewoźnika odbioru. Pozostaw 0 dla odbioru bezpłatnego albo wpisz kwotę netto. Ta stawka obowiązuje niezależnie od wybranego sklepu.
Zarządzanie sklepami
Lista sklepów pokazuje wszystkie Twoje punkty odbioru wraz z nazwą, adresem, kodem pocztowym, miastem, telefonem i statusem. Z poziomu tej listy dodajesz, edytujesz, włączasz i wyłączasz oraz usuwasz sklepy.
Każdy sklep ma następujące pola:
- Nazwa (obowiązkowa): etykieta wyświetlana klientowi.
- Adres (obowiązkowy) i Kod pocztowy.
- Miasto (obowiązkowe).
- Telefon.
- Godziny otwarcia: pole tekstowe, na przykład „Pn-Sob 9:00-19:00”.
- Szerokość i długość geograficzna (obowiązkowe): pozycja sklepu na mapie.
- Aktywny: w checkoucie proponowane są wyłącznie sklepy aktywne.
Aby uzupełnić współrzędne, nie musisz ich wyszukiwać ręcznie: kliknij na mapie wyświetlonej pod formularzem, aby ustawić punkt, albo skorzystaj z geokodowania adresu. Szerokość i długość geograficzna uzupełnią się automatycznie. Geokodowanie opiera się na Nominatim / OpenStreetMap.
Po stronie klienta (checkout)
Na etapie dostawy, gdy klient wybierze przewoźnika „Odbiór w sklepie”, moduł wyświetla pod przewoźnikiem listę aktywnych sklepów oraz interaktywną mapę, na której każdy sklep oznaczony jest znacznikiem. Klient wybiera punkt odbioru z listy albo bezpośrednio na mapie.
Wybór jest obowiązkowy: dopóki żaden sklep nie zostanie wskazany, etapu dostawy nie da się zatwierdzić, a komunikat prosi klienta o wybranie sklepu. Wybór zapisuje się w czasie rzeczywistym (przez zapytanie AJAX) i jest przypisany do koszyka.
Jeśli żaden sklep nie jest aktywny, zamiast mapy wyświetla się komunikat ostrzegawczy.
Śledzenie zamówienia
Po zatwierdzeniu zamówienia wybrany sklep jest zapisywany jako migawka powiązana z zamówieniem (nazwa, adres, kod pocztowy, miasto, telefon i godziny otwarcia z chwili zakupu). Pozostaje dzięki temu dostępny nawet wtedy, gdy sklep zostanie później zmieniony albo usunięty. Punkt odbioru wyświetla się automatycznie:
- na stronie potwierdzenia zamówienia;
- w szczegółach zamówienia w koncie klienta;
- w karcie zamówienia w panelu administracyjnym, w bocznej kolumnie.
Struktura techniczna
Ta sekcja jest przeznaczona dla integratorów i programistów, którzy chcą poznać wewnętrzne działanie modułu.
Rodzaj modułu
Klasa główna DataFireflyStorePickup rozszerza CarrierModule. Stawkę przewoźnika zwracają metody getOrderShippingCost() i getOrderShippingCostExternal(), obie oparte na konfiguracji DATAFIREFLY_PICKUP_FEE.
Używane hooki
actionFrontControllerSetMedia: ładuje Leaflet (zdalne CSS/JS) oraz zasoby frontowe modułu na stronie zamówienia.displayCarrierExtraContent: wstrzykuje listę i mapę pod przewoźnikiem odbioru.actionCarrierUpdate: aktualizuje identyfikator przewoźnika po jego zmianie w panelu administracyjnym.actionValidateStepComplete: czyni wybór sklepu obowiązkowym na etapie dostawy.actionValidateOrder: utrwala wybrany sklep w zamówieniu.displayOrderConfirmationidisplayOrderDetail: wyświetlają punkt odbioru po stronie klienta.displayAdminOrderSide: wyświetla punkt odbioru w karcie zamówienia w panelu administracyjnym.
Rozpoznawanie przewoźnika
Metoda isPickupCarrier() identyfikuje przewoźnika odbioru zarówno po jego referencji (id_reference), jak i po bieżącym identyfikatorze, ponieważ ID przewoźnika w PrestaShop zmienia się przy każdej modyfikacji w panelu administracyjnym. Przechowywane są w tym celu dwa klucze konfiguracji: DATAFIREFLY_PICKUP_CARRIER_ID i DATAFIREFLY_PICKUP_CARRIER_REF.
Tabele danych
datafirefly_pickup_store: sklepy (nazwa, adres, współrzędne, godziny otwarcia, status). Obsługiwana przezObjectModelDataFireflyPickupStore.datafirefly_pickup_selection: sklep wybrany dla koszyka (kluczid_cart), przed zatwierdzeniem zamówienia.datafirefly_pickup_order: migawka sklepu dla zamówienia (kluczid_order), zachowywana po zakupie.
Wybór przez AJAX
Kontroler frontowy ajax (akcja selectStore) zapisuje wybrany sklep w tabeli datafirefly_pickup_selection dla bieżącego koszyka. Przy zatwierdzeniu zamówienia ten wybór jest kopiowany do datafirefly_pickup_order, a wiersz koszyka zostaje usunięty.
Deinstalacja
Deinstalacja oznacza przewoźnika jako usuniętego i wyłączonego, usuwa klucze konfiguracji (DATAFIREFLY_PICKUP_CARRIER_ID, DATAFIREFLY_PICKUP_CARRIER_REF, DATAFIREFLY_PICKUP_FEE) oraz kasuje trzy tabele modułu. Zapisane sklepy zostają więc usunięte.
Znane ograniczenia
- Punkt odbioru nie jest wstawiany do wiadomości e-mail z potwierdzeniem: pozostaje widoczny w panelu administracyjnym i w koncie klienta.
- Geokodowanie opiera się na Nominatim (OpenStreetMap), dlatego zalecane jest umiarkowane korzystanie z tej usługi, zgodnie z jej warunkami użytkowania.
FAQ
Czy do mapy potrzebny jest klucz API?
Nie. Mapa korzysta z Leaflet i kafelków OpenStreetMap, bez klucza API i bez konfiguracji zewnętrznej.
Czy klient może zatwierdzić zamówienie bez wyboru sklepu?
Nie. Gdy wybrany jest przewoźnik odbioru, wskazanie sklepu jest konieczne, aby przejść etap dostawy.
Co dzieje się z punktem odbioru, jeśli usunę sklep po złożeniu zamówienia?
Zamówienie zachowuje migawkę sklepu (nazwa, adres, godziny otwarcia) zapisaną w chwili zakupu. Pozostaje ona dostępna także po usunięciu sklepu.
Czy moduł jest zgodny z PrestaShop 9?
Tak, moduł jest zgodny z PrestaShop 8.x i 9.x.