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.4.0

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, łączy produkty ze sobą, synchronizuje stany przez cron i rozstrzyga duplikaty EAN13 na podstawie priorytetu dostawcy.

Moduł nie zastępuje natywnego importu CSV PrestaShop: 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ą, priorytetem (liczba całkowita, 1 jest najwyższy i rozstrzyga duplikaty EAN13), statusem aktywny oraz opcją Utwórz natywnego dostawcę PrestaShop, która 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, listę wszystkich faktycznie obecnych pól z przykładowymi wartościami oraz gotowe mapowanie, które można edytować przed zastosowaniem.

Numerowane kolumny ze zdjęciami są grupowane automatycznie, spakowane kolumny rozmiarów, kolumny kolorów i kolumny referencji powiązanych są rozpoznawane, a nazwy kolumn identyfikowane po angielsku, francusku, hiszpańsku, niemiecku i włosku.

Zawsze sprawdź propozycję przed zastosowaniem. Wielu dostawców przesyła sugerowaną cenę detaliczną tam, gdzie moduł oczekuje kosztu zakupu.

Krok 3 — Mapowanie pól

Mapowanie to obiekt JSON łączący kolumny lub węzły pliku z polami znormalizowanymi. 21 pól kanonicznych to:

name reference ean13 mpn cost quantity description description_short category manufacturer weight tax_rate image images group_reference attributes variants_stock variants_ean variants_reference variant_attribute related

Wymagane jest wyłącznie reference lub ean13.

Wiele źródeł dla jednego pola

{
  "fields": {
    "reference": "id",
    "name": "name",
    "cost": "wholesale_price",
    "images": ["image_1", "image_2", "image_3", "image_4"]
  }
}

W polu images importowane są wszystkie wypełnione kolumny. W każdym innym polu brana jest pierwsza niepusta wartość, co pozwala zapisać łańcuch zapasowy.

CSV

Powiąż każde pole z nagłówkiem kolumny lub z indeksem kolumny od 0. Separator jest wykrywany automatycznie, pola wielowierszowe w cudzysłowach są obsługiwane.

{
  "fields": {
    "name": "product_name",
    "reference": "sku",
    "ean13": "ean",
    "cost": "price",
    "quantity": "stock",
    "category": "category",
    "image": "image_url"
  }
}

Wiersz, którego liczba kolumn nie zgadza się z nagłówkiem, jest odrzucany i liczony jako błąd. Bez tej kontroli wszystkie kolejne wartości byłyby przesunięte i zaimportowane po cichu.

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.

JSON

items_path używa notacji z kropkami aż do tablicy produktów. Segment liczbowy odczytuje wpis tablicy: images.0 to pierwsze zdjęcie.

{
  "items_path": "data.products",
  "fields": {
    "reference": "sku",
    "name": "name",
    "ean13": "barcode",
    "cost": "prices.cost",
    "quantity": "inventory.available",
    "image": "images.0"
  }
}

Zakładka Feeds zawiera szesnaście skomentowanych przykładów.

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, współczynnik lub stały dodatek. Następnie stosowane jest opcjonalne zaokrąglenie psychologiczne.

Zakres i rozstrzyganie

Reguła może dotyczyć dostawcy, kategorii, obu lub być globalna. Wygrywa najbardziej szczegółowa, w kolejności: dostawca + kategoria, sam dostawca, sama kategoria, reguła globalna. Reguły kategorii obejmują także podkategorie. Bez żadnej reguły stosowana jest marża domyślna.

Priorytet EAN między źródłami

Gdy ten sam ean13 pojawia się w kilku plikach, dostawca o najlepszym priorytecie posiada produkt, pozostałe źródła są pomijane, a jeśli później dostawca o lepszym priorytecie dostarczy ten EAN, automatycznie przejmuje produkt.

Kombinacje

Obsługiwane są dwie struktury plików.

Jeden wiersz na wariant

Włącz Buduj kombinacje i zmapuj group_reference (identyczne dla wszystkich wariantów jednego produktu) i attributes (opcje, na przykład Rozmiar:M|Kolor:Czerwony).

Jeden wiersz na produkt, rozmiary spakowane w kolumnie

To najczęstsza struktura u hurtowników odzieży i bielizny:

sizes_stock : EU 70C | FR 85C:4,EU 70D | FR 85D:2,EU 75A | FR 90A:1
ean_codes   : EU 70C | FR 85C:5901741925360,EU 70D | FR 85D:5901741925377

Włącz Podziel spakowane warianty i zmapuj variants_stock, a także variants_ean i variants_reference, jeśli plik je zawiera. Moduł dzieli wiersz na jedną kombinację na rozmiar i dopasowuje stan, EAN oraz numer po etykiecie. Trzy ustawienia towarzyszą polu wyboru: nazwa grupy atrybutów (domyślnie Taille), separator między wpisami (,) i separator między etykietą a wartością (:).

Podział następuje na ostatnim wystąpieniu separatora, więc etykieta taka jak EU 70C | FR 85C pozostaje czytelna.

Zaznacz pole przed pierwszym importem. Jeśli zaimportujesz najpierw bez niego, produkty powstaną bez group_reference: po włączeniu podziału moduł nie znajdzie tych produktów nadrzędnych i utworzy nowe, podwajając katalog.

Druga oś z kolumny pliku

Wielu dostawców wysyła kolor w osobnej kolumnie, podczas gdy rozmiary są spakowane. Zmapuj variant_attribute na tę kolumnę:

{
  "fields": {
    "reference": "id",
    "name": "name",
    "cost": "wholesale_price",
    "variant_attribute": "color",
    "variants_stock": "sizes_stock",
    "variants_ean": "ean_codes"
  }
}

Każda kombinacja produktu zyskuje wtedy drugą oś, pod grupą atrybutów dodatkowej kolumny ustawioną na pliku (domyślnie Couleur). Otrzymujesz kombinacje Rozmiar i Kolor, użyteczne dla filtrów.

Ponieważ każdy wiersz pliku to produkt w jednym kolorze, grupa Kolor ma tylko jedną wartość na produkt. Kolory nie są łączone w jedną kartę z wyborem koloru: do nawigacji między nimi służą produkty powiązane poniżej.

Produkty powiązane

Gdy plik wymienia inne kolory lub powiązane modele w kolumnie referencji, zaznacz Importuj produkty powiązane i zmapuj related:

{
  "fields": {
    "reference": "id",
    "related": "other_colors"
  }
}

Kolumna zawiera listę referencji dostawcy oddzielonych przecinkami. Powiązania powstają jako akcesoria PrestaShop i pojawiają się w bloku produktów powiązanych Twojego szablonu.

Rozwiązywanie następuje po odczytaniu całego pliku, ponieważ referencja bardzo często wskazuje produkt znajdujący się dalej. Trzy zachowania:

  • referencja wskazująca na sam produkt jest pomijana, co zdarza się często, bo wielu dostawców wymienia całą grupę przy każdym elemencie;
  • referencja wskazująca produkt nieobecny w pliku jest pomijana bez liczenia jako błąd: przy eksporcie filtrowanym po kategorii dotyczy to zwykle jednej piątej referencji;
  • istniejące akcesoria nigdy nie są usuwane, więc powiązania dodane ręcznie przetrwają. W zamian zmieniona przez dostawcę grupa pozostawia stare powiązania.

Liczba utworzonych powiązań pojawia się w komunikacie końcowym i w osobnej kolumnie dziennika.

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 przepisujesz karty produktów pod SEO, odznacz nazwę i opisy po pierwszym imporcie.

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 tego pliku.

W dropshippingu wyzerowanie stanu jest najbezpieczniejsze: produkt nie jest już sprzedawalny, ale zachowuje adres URL i pozycję.

Kategorie i waluty

Pole category przyjmuje prostą nazwę lub pełną ścieżkę, na przykład Start > Biuro > Krzesła. Separator jest konfigurowalny per plik, 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.

Duże katalogi

Pliki są czytane strumieniowo: zużycie pamięci nie zależy od rozmiaru pliku. Przetwarzanie dzielone jest na wznawialne partie. Dwa ustawienia: punkt zapisu co N produktów (domyślnie 2000) i budżet czasu na przebieg (domyślnie 120 s).

Podział zwielokrotnia wolumen: plik z 7300 produktami wariantowymi daje ponad 33 000 kombinacji, czyli około 41 000 obiektów przy pierwszym pełnym imporcie. Zaplanuj kilka przebiegów i przetestuj na sklepie testowym.

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 ograniczony do 45 sekund.

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 i &budget=600.

Po wygenerowaniu nowego tokena zaktualizuj zadania crona: stary adres zwróci błąd 403.

Ustawienia ogólne

  • Nowe produkty od razu aktywne — domyślnie wyłączone.
  • 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.
  • 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, utworzone powiązania produktów, znacznik ukończenia z punktem wznowienia, czas wykonania oraz szczegóły pierwszych błędów.

Rozwiązywanie problemów

„Malformed CSV row: 23 columns instead of 22″

Wiersz zawiera nieoznaczony separator lub cudzysłów w polu tekstowym. Jest odrzucany.

„Feed file not found or outside shop directory”

Dla źródła plikowego ścieżka musi wskazywać czytelny plik w katalogu sklepu.

Analiza nie znajduje produktów

Wpisz items_path ręcznie w mapowaniu i uruchom analizę ponownie.

Produkty są tworzone, ale niewidoczne w sklepie

To zachowanie domyślne: utworzone produkty są wyłączone.

Kombinacje nie są tworzone

Sprawdź, czy odpowiednie pole wyboru jest zaznaczone, czy wymagane pola są zmapowane i czy separatory odpowiadają plikowi.

Mój katalog podwoił się po włączeniu podziału

Import uruchomiono przed zaznaczeniem pola. Usuń produkty utworzone przez ten plik, wyczyść kursory i uruchom ponownie.

Mało lub brak utworzonych produktów powiązanych

Powiązania są rozwiązywane dopiero na końcu zakończonego pełnego importu: przy dużym pliku przetwarzanym w kilku przebiegach pojawiają się w ostatnim. Sprawdź też, czy referencje kolumny odpowiadają polu zmapowanemu na reference.

Ceny wydają się za wysokie lub za niskie

Sprawdź koszty brutto, walutę, obowiązującą regułę marży i czy pole zmapowane na cost to rzeczywiście koszt zakupu.

Import nigdy się nie kończy

Przy bardzo dużym pliku to normalne: postępuje przebiegami.

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