# Import dostawców i dropshipping dla PrestaShop 8 i 9

> Pełny przewodnik po module Import dostawców & Dropshipping dla PrestaShop 8 i 9: automatyczna analiza, wiele źródeł dla pola, podział spakowanych wariantów, druga oś kombinacji i produkty powiązane.

- Strona: <https://www.datafirefly.com/pl/documentation/import-fournisseurs-dropshipping-prestashop/>
- Język: pl
- Zaktualizowano: 2026-09-18
- Inne języki: [fr](https://www.datafirefly.com/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [en](https://www.datafirefly.com/en/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [es](https://www.datafirefly.com/es/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [it](https://www.datafirefly.com/it/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/import-fournisseurs-dropshipping-prestashop/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

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