Import dostawców i dropshipping dla PrestaShop 8 i 9
Instalacja, konfiguracja i automatyzacja importu od wielu dostawców (CSV, XML, JSON), marż, kombinacji i synchronizacji stanów magazynowych.
Wprowadzenie
Moduł Import dostawców & Dropshipping (nazwa techniczna dfsupplierfeed) automatycznie importuje i synchronizuje katalogi Twoich dostawców w PrestaShop 8 i 9. Obsługuje wielu dostawców i wiele plików w formatach CSV, XML i JSON, stosuje Twoje reguły marży, buduje kombinacje, synchronizuje stany magazynowe przez cron i rozstrzyga duplikaty EAN13 na podstawie priorytetu dostawcy.
Moduł nie zastępuje natywnego importu CSV PrestaShop (przeznaczonego do jednorazowego ręcznego wczytania): uprzemysławia cykliczne importy z wielu źródeł, z automatycznymi marżami, kombinacjami i synchronizacją.
Instalacja
- W panelu administracyjnym przejdź do Moduły > Menedżer modułów, a następnie Wgraj moduł.
- Wybierz plik
dfsupplierfeed.zipi zatwierdź. - Po instalacji kliknij Konfiguruj.
Podczas instalacji moduł tworzy pięć tabel (dfsf_supplier, dfsf_feed, dfsf_rule, dfsf_product, dfsf_log) i generuje unikalny token crona.
Przegląd interfejsu
- Dashboard — liczniki i ostrzeżenie o plikach, których import trwa.
- Suppliers — dostawcy i priorytety.
- Feeds — pliki, analiza, mapowanie pól i opcje.
- Margin rules — reguły obliczania cen sprzedaży.
- Logs — szczegółowa historia importów.
- Settings & Cron — ustawienia ogólne, duże katalogi, adresy crona.
Krok 1 — Utwórz dostawców
W zakładce Suppliers dodaj dostawcę z:
- Nazwą dostawcy.
- Priorytetem — liczbą całkowitą, gdzie
1jest najwyższy. Rozstrzyga duplikaty EAN13. - Aktywnością — nieaktywny dostawca jest pomijany przez crona.
- Utwórz natywnego dostawcę PrestaShop — zalecane: uzupełnia też koszt zakupu w
product_supplier.
Najlepsze priorytety (najniższe liczby) przypisz najbardziej wiarygodnym lub najtańszym dostawcom: to oni będą „posiadać” wspólne produkty.
Krok 2 — Utwórz plik i pozwól modułowi go przeanalizować
W zakładce Feeds utwórz plik z dostawcą, typem źródła (zdalny URL lub plik lokalny w katalogu sklepu) i formatem. Zapisz, a następnie kliknij przycisk lupy w wierszu pliku.
Moduł pobiera próbkę i wyświetla:
- wykryty
items_pathdla plików XML i JSON; - listę wszystkich faktycznie obecnych pól, z przykładowymi wartościami;
- gotowe mapowanie, które można edytować przed zastosowaniem.
Nazwy kolumn są rozpoznawane po angielsku, francusku, hiszpańsku, niemiecku i włosku, z kontrolą sensowności wartości: pole nazwane „cena”, ale zawierające tekst, nie zostanie zaproponowane jako koszt.
Zawsze sprawdź propozycję przed zastosowaniem. Wielu dostawców przesyła sugerowaną cenę detaliczną tam, gdzie moduł oczekuje kosztu zakupu: Twoja marża zostałaby wtedy nałożona na cenę już zawierającą marżę.
Krok 3 — Mapowanie pól
Mapowanie to obiekt JSON łączący kolumny lub węzły pliku z polami znormalizowanymi. 16 pól kanonicznych to:
name reference ean13 mpn cost quantity description description_short category manufacturer weight tax_rate image images group_reference attributes
Wymagane jest wyłącznie reference lub ean13: to dwa klucze dopasowania. Wiersz bez żadnego z nich jest odrzucany.
CSV
Powiąż każde pole z nagłówkiem kolumny lub z indeksem kolumny od 0, gdy nagłówki są bezużyteczne. Separator jest wykrywany automatycznie, pola wielowierszowe w cudzysłowach są obsługiwane, a formaty 1 234,56 i 1,234.75 akceptowane.
{
"fields": {
"name": "product_name",
"reference": "sku",
"ean13": "ean",
"cost": "price",
"quantity": "stock",
"category": "category",
"image": "image_url"
}
}
Mapowanie po indeksie, dla pliku bez użytecznego nagłówka:
{
"fields": { "reference": "0", "ean13": "1", "name": "2", "cost": "3", "quantity": "4" }
}
XML
items_path wskazuje powtarzalny węzeł, na dowolnej głębokości. Ścieżki pól są względne wobec tego węzła, a @nazwa odczytuje atrybut.
{
"items_path": "products/product",
"fields": {
"reference": "@sku",
"name": "title",
"ean13": "ean",
"cost": "pricing/wholesale",
"quantity": "stock/quantity",
"image": "images/image"
}
}
Ponieważ ścieżki są względne wobec produktu, wartość obecna wyłącznie w węźle nadrzędnym nie może zostać odczytana: nawigacja .. nie istnieje. Jeśli Twój plik XML umieszcza numer nadrzędny powyżej wariantów, poproś dostawcę o płaski eksport.
JSON
items_path używa notacji z kropkami aż do tablicy produktów. Segment liczbowy odczytuje wpis tablicy: images.0 to pierwsze zdjęcie. Pozostaw items_path puste, jeśli plik zaczyna się bezpośrednio od [.
{
"items_path": "data.products",
"fields": {
"reference": "sku",
"name": "name",
"ean13": "barcode",
"cost": "prices.cost",
"quantity": "inventory.available",
"image": "images.0"
}
}
Zakładka Feeds zawiera trzynaście skomentowanych przykładów obejmujących najczęstsze struktury.
Krok 4 — Ustal marże
W zakładce Margin rules każda reguła oblicza cenę sprzedaży netto na podstawie kosztu zakupu netto:
- Procent —
koszt × (1 + wartość/100). - Współczynnik —
koszt × wartość. - Stały dodatek —
koszt + wartość.
Następnie stosowane jest opcjonalne zaokrąglenie psychologiczne: x.99, x.95, x.90 lub w górę do liczby całkowitej.
Zakres i rozstrzyganie
Reguła może dotyczyć dostawcy, kategorii, obu lub być globalna. Wygrywa najbardziej szczegółowa, w kolejności: dostawca + kategoria, potem sam dostawca, potem sama kategoria, potem reguła globalna. Reguły kategorii obejmują także podkategorie, przy czym wygrywa najbliższa produktowi. Bez żadnej reguły stosowana jest marża domyślna z ustawień.
Priorytet EAN między źródłami
Gdy ten sam ean13 pojawia się w kilku plikach:
- dostawca o najlepszym priorytecie posiada produkt; ceny, stan i koszt pochodzą z jego pliku;
- pozostałe źródła są dla tego towaru pomijane;
- jeśli później dostawca o lepszym priorytecie dostarczy ten EAN, automatycznie przejmuje produkt.
Kombinacje
Włącz Buduj kombinacje na pliku i zmapuj dwa dodatkowe pola:
group_reference— identyczne dla wszystkich wariantów jednego produktu;attributes— opcje wariantu, na przykładRozmiar:M|Kolor:Czerwony.
Między parami dopuszczalne są |, , i ;, a między nazwą a wartością : lub =. Moduł tworzy produkt nadrzędny z pierwszego napotkanego wariantu, a następnie po jednej kombinacji na wariant, z własnym numerem, EAN, kosztem i stanem. Brakujące grupy atrybutów i atrybuty powstają automatycznie.
Plik musi zawierać jeden wiersz na wariant. Cena produktu nadrzędnego stanowi odniesienie, a każda kombinacja niesie różnicę ceny wyliczoną z własnego kosztu.
Co plik może nadpisać
Pięć pól wyboru na plik decyduje, które pola są synchronizowane: ceny, stan, nazwa, opisy, zdjęcia. Domyślnie zaznaczone są tylko ceny i stan.
Jeśli ustalasz ceny ręcznie, odznacz ceny: plik będzie synchronizował wyłącznie stan magazynowy, nadal rejestrując koszt zakupu u dostawcy.
Zdjęcia są importowane ponownie tylko wtedy, gdy adresy URL w pliku faktycznie się zmieniły, co pozwala uniknąć ponownego pobierania całego katalogu przy każdym przebiegu.
Produkty wycofane z katalogu dostawcy
Każdy plik wybiera swoje zachowanie: nie ruszać, wyzerować stan, wyłączyć lub jedno i drugie. Akcja wykonuje się po zakończeniu pełnego importu i tylko na produktach, które ten plik utworzył lub powiązał.
Kategorie i waluty
Pole category przyjmuje prostą nazwę lub pełną ścieżkę, na przykład Start > Biuro > Krzesła. Separator jest konfigurowalny dla każdego pliku, a opcja Twórz brakujące kategorie tworzy nieistniejące poziomy.
Jeśli dostawca fakturuje w innej walucie, wybierz ją na pliku: koszty są przeliczane na domyślną walutę sklepu przed zastosowaniem marż.
Duże katalogi
Pliki są czytane strumieniowo: zużycie pamięci nie zależy od rozmiaru pliku. Dodatkowo przetwarzanie dzielone jest na wznawialne partie. Dwa ustawienia w zakładce Settings & Cron:
- Punkt zapisu co N produktów (domyślnie 2000) — pozycja jest regularnie zapisywana, więc proces przerwany przez hosting startuje od ostatniego punktu, a nie od początku.
- Budżet czasu na przebieg (domyślnie 120 s) — przebieg kończy się po tym czasie i zapisuje pozycję; kolejne wywołanie crona wznawia dokładnie od tego samego produktu.
Bardzo duży katalog wymaga po prostu kilku przebiegów crona i kończy się sam. Lista plików pokazuje postęp, a raport JSON crona podaje szczyt pamięci i produkt wznowienia.
Pobrany plik pozostaje w pamięci podręcznej, dopóki import nie zostanie zakończony: wznowienie nie pobiera niczego ponownie, a kolejność produktów pozostaje stabilna.
Ręczne uruchomienie importu
- Pełny import (ikona odtwarzania) — aktualizuje powiązane produkty i tworzy brakujące, jeśli plik na to pozwala.
- Synchronizacja stanu (ikona odświeżania) — aktualizuje tylko ceny i ilości już powiązanych produktów.
Z panelu administracyjnego przebieg jest celowo ograniczony do 45 sekund, aby serwer WWW nie przekroczył limitu czasu. Przy dużym pliku komunikat podaje osiągnięty produkt: uruchom ponownie lub pozwól cronowi dokończyć.
Automatyzacja przez cron
# Synchronizacja stanu co godzinę
0 * * * * curl -sL "https://twojsklep.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=TWOJ_TOKEN&mode=stock" > /dev/null
# Pełny import każdej nocy
30 3 * * * curl -sL "https://twojsklep.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=TWOJ_TOKEN&mode=full" > /dev/null
Parametry opcjonalne: &id_feed=N dla pojedynczego pliku, &budget=600 dla dłuższego przebiegu.
Po wygenerowaniu nowego tokena w ustawieniach zaktualizuj zadania crona: stary adres zwróci błąd 403.
Ustawienia ogólne
- Nowe produkty od razu aktywne — domyślnie wyłączone, aby sprawdzić je przed publikacją.
- Wyłączanie produktów niedostępnych u dostawcy, z ponownym włączeniem po powrocie stanu.
- Marża domyślna, gdy żadna reguła nie pasuje.
- Przechowywanie dzienników i automatyczne czyszczenie.
- Przy odinstalowaniu — usunąć dane lub zachować wszystko na potrzeby ponownej instalacji.
- Wyczyść pamięć podręczną plików i kursory w panelu konserwacji.
Monitorowanie i dzienniki
Zakładka Logs wypisuje każdy przebieg: plik, tryb, produkty przetworzone, utworzone, zaktualizowane, pominięte, błędne, brakujące, znacznik ukończenia z punktem wznowienia, czas wykonania oraz szczegóły pierwszych błędów.
Rozwiązywanie problemów
„Feed file not found or outside shop directory”
Dla źródła plikowego ścieżka musi wskazywać czytelny plik w katalogu sklepu. Użyj ścieżki względem katalogu głównego lub adresu URL.
Analiza nie znajduje produktów
Wpisz items_path ręcznie w mapowaniu i uruchom analizę ponownie: wystartuje od tej ścieżki.
Produkty są tworzone, ale niewidoczne w sklepie
To zachowanie domyślne: utworzone produkty są wyłączone. Sprawdź je i włącz albo włącz automatyczną publikację w ustawieniach.
Dostawca nigdy nie nadpisuje wspólnego produktu
Jego priorytet jest prawdopodobnie gorszy niż priorytet dostawcy będącego właścicielem. Dostosuj priorytety w zakładce Suppliers.
Ceny wydają się za wysokie lub za niskie
Sprawdź, czy plik podaje koszty brutto (opcja i stawka podatku), czy waluta pliku jest poprawna oraz która reguła marży faktycznie obowiązuje zgodnie z kolejnością rozstrzygania. Sprawdź też, czy pole zmapowane na cost to rzeczywiście koszt zakupu, a nie sugerowana cena detaliczna.
Kombinacje nie są tworzone
Sprawdź, czy opcja jest włączona na pliku, czy group_reference i attributes są zmapowane oraz czy plik zawiera jeden wiersz na wariant.
Import nigdy się nie kończy
Przy bardzo dużym pliku to normalne: postępuje przebiegami. Kolumna Status podaje produkt wznowienia. Jeśli postęp jest zbyt wolny, zwiększ budżet czasu na przebieg.
Zgodność
- PrestaShop 8.0 do 9.x, PHP 7.4 do 8.3.
- Bez nadpisywania rdzenia PrestaShop.
- Multisklep: utworzone produkty są przypisywane do sklepów bieżącego kontekstu.
- Interfejs przetłumaczony na angielski i francuski.