# Leveranciersimport & Dropshipping voor PrestaShop 8 en 9

> Volledige handleiding bij de module Leveranciersimport & Dropshipping voor PrestaShop 8 en 9: automatische analyse, meerdere bronnen per veld, gebundelde varianten, tweede combinatie-as en gerelateerde producten.

- Pagina: <https://www.datafirefly.com/nl/documentation/import-fournisseurs-dropshipping-prestashop/>
- Taal: nl
- Bijgewerkt op: 2026-09-18
- Andere talen: [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), [pl](https://www.datafirefly.com/pl/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/import-fournisseurs-dropshipping-prestashop/index.md)
- Index: <https://www.datafirefly.com/nl/documentation/llms.txt>

## Overzicht

De module **Leveranciersimport & Dropshipping** (technische naam `dfsupplierfeed`) importeert en synchroniseert de catalogi van je leveranciers automatisch in PrestaShop 8 en 9. Hij verwerkt meerdere leveranciers en feeds in CSV, XML en JSON, past je margeregels toe, bouwt combinaties, koppelt producten aan elkaar, synchroniseert de voorraad via cron en beslecht dubbele EAN13-codes met een prioriteit per leverancier.

De module vervangt de native CSV-import van PrestaShop niet: hij industrialiseert _terugkerende_ imports uit meerdere bronnen, met automatische marges, combinaties en synchronisatie.

## Installatie

1. Ga in de back office naar **Modules > Modulebeheer** en dan **Een module uploaden**.
2. Selecteer het bestand `dfsupplierfeed.zip` en bevestig.
3. Klik na installatie op **Configureren**.

Bij installatie maakt de module vijf tabellen aan (`dfsf_supplier`, `dfsf_feed`, `dfsf_rule`, `dfsf_product`, `dfsf_log`) en genereert een uniek cron-token.

## Overzicht van de interface

- **Dashboard** — tellers en een waarschuwing over feeds waarvan de import loopt.
- **Suppliers** — leveranciers en prioriteiten.
- **Feeds** — feeds, analyse, veldkoppeling en opties.
- **Margin rules** — regels voor de verkoopprijzen.
- **Logs** — gedetailleerde importgeschiedenis.
- **Settings & Cron** — algemene instellingen, grote catalogi, cron-URL's.

## Stap 1 — Leveranciers aanmaken

Voeg in het tabblad **Suppliers** een leverancier toe met een **naam**, een **prioriteit** (geheel getal, `1` is de hoogste en beslecht dubbele EAN13), de status **actief** en de optie **Native PrestaShop-leverancier aanmaken**, die ook de inkoopprijs in `product_supplier` vult.

Geef de beste prioriteiten (laagste getallen) aan je betrouwbaarste of goedkoopste leveranciers: zij bezitten dan de gedeelde producten.

## Stap 2 — Feed aanmaken en laten analyseren

Maak in het tabblad **Feeds** de feed aan met leverancier, brontype (externe _URL_ of _lokaal bestand_ in de shopmap) en formaat. Sla op en klik daarna op de knop **vergrootglas** in de feedregel.

De module haalt een steekproef op en toont het gedetecteerde `items_path`, de lijst met alle werkelijk aanwezige velden met voorbeeldwaarden, en een volledig vooringevulde koppeling die je kunt aanpassen.

Genummerde fotokolommen worden automatisch gegroepeerd, gebundelde maatkolommen, kleurkolommen en kolommen met gerelateerde referenties herkend, en kolomnamen geïdentificeerd in het Engels, Frans, Spaans, Duits en Italiaans.

Controleer het voorstel altijd voor je het toepast. Veel leveranciers leveren een adviesprijs waar de module een **inkoopprijs** verwacht.

## Stap 3 — De veldkoppeling

De koppeling is een JSON-object dat de kolommen of knopen van de feed verbindt met genormaliseerde velden. De 21 canonieke velden zijn:

`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`

Alleen `reference` of `ean13` is verplicht.

### Meerdere bronnen voor één veld

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

Voor het veld `images` wordt elke gevulde kolom geïmporteerd. Bij elk ander veld wordt de eerste niet-lege waarde gehouden, waarmee je een terugvalketen kunt schrijven.

### CSV

Koppel elk veld aan een **kolomkop** of aan een **kolomindex** vanaf 0. Het scheidingsteken wordt automatisch herkend, meerregelige velden tussen aanhalingstekens worden verwerkt.

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

Een regel waarvan het aantal kolommen niet klopt met de kop wordt **geweigerd** en als fout geteld. Zonder die controle zouden alle volgende waarden verschuiven en stilzwijgend worden geïmporteerd.

### XML

`items_path` wijst naar de herhaalde knoop, op elke diepte. Veldpaden zijn relatief ten opzichte van die knoop, en `@naam` leest een attribuut.

```
{
  "items_path": "products/product",
  "fields": {
    "reference": "@sku",
    "name": "title",
    "ean13": "ean",
    "cost": "pricing/wholesale",
    "quantity": "stock/quantity",
    "image": "images/image"
  }
}
```

Omdat paden relatief zijn ten opzichte van het item, kan een waarde die alleen op een bovenliggende knoop staat niet worden gelezen: `..`-navigatie bestaat niet.

### JSON

`items_path` gebruikt puntnotatie tot aan de itemarray. Een numeriek segment leest een array-element: `images.0` is de eerste afbeelding.

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

Het tabblad Feeds bevat zestien becommentarieerde voorbeelden.

## Stap 4 — Marges instellen

In het tabblad **Margin rules** berekent elke regel de verkoopprijs exclusief btw vanuit de inkoopprijs exclusief btw: **percentage**, **coëfficiënt** of **vaste opslag**. Daarna wordt een optionele **psychologische afronding** toegepast.

### Bereik en oplossing

Een regel kan gelden voor een leverancier, een categorie, beide, of globaal zijn. De meest specifieke wint, in deze volgorde: leverancier + categorie, alleen leverancier, alleen categorie, globale regel. Categorieregels gelden ook voor subcategorieën. Zonder regel wordt de **standaardmarge** gebruikt.

## De EAN-prioriteit tussen bronnen

Wanneer dezelfde `ean13` in meerdere feeds voorkomt, bezit de leverancier met de beste prioriteit het product, worden de andere bronnen **overgeslagen**, en neemt een later verschijnende leverancier met betere prioriteit **automatisch over**.

## Combinaties

Twee feedstructuren worden ondersteund.

### Eén regel per variant

Zet **Combinaties bouwen** aan en koppel `group_reference` (identiek voor alle varianten van één product) en `attributes` (de opties, bijvoorbeeld `Maat:M|Kleur:Rood`).

### Eén regel per product, maten gebundeld in een kolom

Dit is de meest voorkomende structuur bij textiel- en lingeriegroothandels:

```
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
```

Zet **Gebundelde varianten splitsen** aan en koppel `variants_stock`, plus `variants_ean` en `variants_reference` als de feed die levert. De module splitst de regel in één combinatie per maat en koppelt voorraad, EAN en referentie **via het label**. Drie instellingen horen bij het vinkje: de **naam van de attribuutgroep** (standaard `Taille`), het **scheidingsteken tussen items** (`,`) en het **scheidingsteken tussen label en waarde** (`:`).

De splitsing gebeurt op de **laatste** voorkomen van het scheidingsteken, zodat een label als `EU 70C | FR 85C` leesbaar blijft.

Vink het vakje aan **voor** de eerste import. Importeer je eerst zonder, dan worden de producten zonder `group_reference` aangemaakt: schakel je de splitsing daarna in, dan vindt de module die bovenliggende producten niet en maakt nieuwe aan, waardoor je catalogus verdubbelt.

### Een tweede as uit een feedkolom

Veel leveranciers sturen de kleur in een aparte kolom terwijl de maten gebundeld zijn. Koppel `variant_attribute` aan die kolom:

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

Elke combinatie van het product krijgt dan een tweede as, onder de **attribuutgroep voor de extra kolom** die op de feed is ingesteld (standaard `Couleur`). Je krijgt Maat- en Kleurcombinaties, bruikbaar voor filters.

Omdat elke feedregel een product in één kleur is, houdt de Kleurgroep maar één waarde per product. Kleuren worden niet samengevoegd tot één pagina met kleurkeuze: gebruik daarvoor de gerelateerde producten hieronder.

## Gerelateerde producten

Wanneer de feed de andere kleuren of de bijbehorende modellen in een kolom met referenties opsomt, vink **Gerelateerde producten importeren** aan en koppel `related`:

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

De kolom bevat een kommagescheiden lijst van leveranciersreferenties. De koppelingen ontstaan als **PrestaShop-accessoires** en verschijnen in het blok gerelateerde producten van je thema.

De oplossing gebeurt **zodra de feed volledig is gelezen**, want een referentie wijst heel vaak naar een product verderop in het bestand. Drie gedragingen:

- een referentie naar het product zelf wordt overgeslagen, wat vaak voorkomt omdat veel leveranciers de hele groep bij elk lid opsommen;
- een referentie naar een product dat niet in de feed staat wordt overgeslagen **zonder als fout te tellen**: bij een op categorie gefilterde export betreft dat routinematig een vijfde van de referenties;
- bestaande accessoires worden **nooit verwijderd**, dus met de hand gelegde koppelingen overleven. Daar staat tegenover dat een door de leverancier gewijzigde groepering oude koppelingen laat staan.

Het aantal aangemaakte koppelingen verschijnt in de eindmelding en in een eigen logkolom.

## Wat de feed mag overschrijven

Vijf vinkjes per feed bepalen welke velden worden gesynchroniseerd: **prijzen**, **voorraad**, **naam**, **beschrijvingen**, **afbeeldingen**. Standaard staan alleen prijzen en voorraad aan.

Herschrijf je de productpagina's voor SEO, vink dan naam en beschrijvingen uit na de eerste import.

## Producten die uit de leverancierscatalogus verdwijnen

Elke feed kiest zijn gedrag: ongemoeid laten, voorraad op nul zetten, uitschakelen of beide. De actie loopt aan het eind van een **voltooide volledige import** en alleen op de producten van die feed.

In dropshipping is voorraad op nul de veiligste keuze: het product is niet meer verkoopbaar maar behoudt zijn URL en zijn ranking.

## Categorieën en valuta

Het veld `category` accepteert een eenvoudige naam of een volledig pad, bijvoorbeeld `Home > Kantoor > Stoelen`. Het scheidingsteken is per feed instelbaar en de optie **Ontbrekende categorieën aanmaken** maakt de ontbrekende niveaus aan.

Factureert de leverancier in een andere valuta, selecteer die dan op de feed: de kosten worden omgerekend naar de standaardvaluta van de shop.

## Grote catalogi

Feeds worden streaming gelezen: het geheugengebruik hangt niet af van de bestandsgrootte. De verwerking wordt in hervatbare batches opgedeeld. Twee instellingen: **bewaarpunt om de N items** (standaard 2000) en **tijdsbudget per doorloop** (standaard 120 s).

Splitsen vermenigvuldigt het volume: een feed met 7.300 variantproducten levert meer dan 33.000 combinaties op, dus ongeveer 41.000 objecten bij de eerste volledige import. Plan meerdere doorlopen en test op een testshop.

## Een import handmatig starten

- **Volledige import** (afspeelicoon) — werkt gekoppelde producten bij en maakt ontbrekende aan als de feed dat toestaat.
- **Voorraadsync** (verversicoon) — werkt alleen prijzen en aantallen van al gekoppelde producten bij.

Vanuit de back office is een doorloop beperkt tot 45 seconden.

## Automatiseren met cron

```
# Voorraadsync elk uur
0 * * * * curl -sL "https://jouwshop.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=JOUW_TOKEN&mode=stock" > /dev/null

# Volledige import elke nacht
30 3 * * * curl -sL "https://jouwshop.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=JOUW_TOKEN&mode=full" > /dev/null
```

Optionele parameters: `&id_feed=N` en `&budget=600`.

Genereer je het token opnieuw, werk dan je cronjobs bij: de oude URL geeft een 403-fout.

## Algemene instellingen

- **Nieuwe producten direct actief** — standaard uit.
- **Producten uitschakelen die bij de leverancier uitverkocht zijn**, weer ingeschakeld zodra er voorraad is.
- **Standaardmarge** wanneer geen regel past.
- **Bewaartermijn van logs** en automatische opschoning.
- **Bij verwijderen van de module** — gegevens wissen of alles bewaren.
- **Feedcache en cursors leegmaken** in het onderhoudspaneel.

## Opvolging en logs

Het tabblad **Logs** toont elke doorloop: feed, modus, verwerkte, aangemaakte, bijgewerkte, overgeslagen, foutieve en verdwenen items, aangemaakte productkoppelingen, een afrondingsvlag met het hervatpunt, uitvoeringstijd en de details van de eerste fouten.

## Problemen oplossen

### "Malformed CSV row: 23 columns instead of 22"

De regel bevat een niet-ontsnapt scheidingsteken of aanhalingsteken in een tekstveld. Hij wordt geweigerd.

### "Feed file not found or outside shop directory"

Voor een bestandsbron moet het pad naar een leesbaar bestand in de shopmap wijzen.

### De analyse vindt geen items

Vul `items_path` handmatig in bij de koppeling en start de analyse opnieuw.

### Producten worden aangemaakt maar zijn niet zichtbaar in de winkel

Dat is het standaardgedrag: aangemaakte producten staan uit.

### Combinaties worden niet aangemaakt

Controleer of het bijbehorende vinkje aanstaat, of de benodigde velden gekoppeld zijn, en of de scheidingstekens bij het bestand passen.

### Mijn catalogus is verdubbeld na het inschakelen van de splitsing

De import liep voordat het vinkje aanstond. Verwijder de door die feed aangemaakte producten, leeg de cursors en start opnieuw.

### Weinig of geen gerelateerde koppelingen aangemaakt

Koppelingen worden pas opgelost aan het eind van een **voltooide** volledige import: bij een grote feed in meerdere doorlopen verschijnen ze bij de laatste. Controleer ook of de referenties in de kolom overeenkomen met het veld dat aan `reference` is gekoppeld.

### De prijzen lijken te hoog of te laag

Controleer kosten inclusief btw, de valuta, welke margeregel geldt, en of het veld dat op `cost` is gekoppeld echt een inkoopprijs is.

### De import raakt nooit klaar

Bij een heel grote feed is dat normaal: hij vordert in doorlopen.

## Compatibiliteit

- PrestaShop 8.0 tot 9.x, PHP 7.4 tot 8.3.
- Zonder override van de PrestaShop-core.
- Multishop: aangemaakte producten worden gekoppeld aan de shops van de huidige context.
- Interface vertaald naar het Engels en Frans.
