PS PrestaShop Średnio zaawansowany

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.

Zaktualizowano Wersja modułu 1.2.1

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

  1. W panelu administracyjnym przejdź do Moduły > Menedżer modułów, a następnie Wgraj moduł.
  2. Wybierz plik dfsupplierfeed.zip i zatwierdź.
  3. 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 1 jest 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_path dla 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:

  • Procentkoszt × (1 + wartość/100).
  • Współczynnikkoszt × wartość.
  • Stały dodatekkoszt + 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ład Rozmiar: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.
Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia