# Importazione Feed Fornitori & Dropshipping per PrestaShop 8 e 9

> Guida completa al modulo Importazione Feed Fornitori & Dropshipping per PrestaShop 8 e 9: analisi automatica, più sorgenti per campo, varianti impacchettate, secondo asse di combinazione e prodotti correlati.

- Pagina: <https://www.datafirefly.com/it/documentation/import-fournisseurs-dropshipping-prestashop/>
- Lingua: it
- Aggiornato il: 2026-09-18
- Altre lingue: [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), [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), [nl](https://www.datafirefly.com/nl/documentation/import-fournisseurs-dropshipping-prestashop/index.md)
- Indice: <https://www.datafirefly.com/it/documentation/llms.txt>

## Presentazione

Il modulo **Importazione Feed Fornitori & Dropshipping** (nome tecnico `dfsupplierfeed`) importa e sincronizza automaticamente i cataloghi dei tuoi fornitori in PrestaShop 8 e 9. Gestisce più fornitori e feed in CSV, XML e JSON, applica le tue regole di margine, costruisce le combinazioni, collega i prodotti tra loro, sincronizza lo stock via cron e arbitra gli EAN13 duplicati tramite una priorità per fornitore.

Il modulo non sostituisce l'importazione CSV nativa di PrestaShop: industrializza importazioni _ricorrenti_ da più fonti, con margini, combinazioni e sincronizzazione automatici.

## Installazione

1. Nel back office, vai su **Moduli > Gestore moduli** e poi **Carica un modulo**.
2. Seleziona il file `dfsupplierfeed.zip` e conferma.
3. Una volta installato, clicca su **Configura**.

All'installazione, il modulo crea cinque tabelle (`dfsf_supplier`, `dfsf_feed`, `dfsf_rule`, `dfsf_product`, `dfsf_log`) e genera un token cron univoco.

## Panoramica dell'interfaccia

- **Dashboard** — contatori e avviso sui feed la cui importazione è in corso.
- **Suppliers** — fornitori e priorità.
- **Feeds** — feed, analisi, mappatura dei campi e opzioni.
- **Margin rules** — regole di calcolo dei prezzi di vendita.
- **Logs** — cronologia dettagliata delle importazioni.
- **Settings & Cron** — impostazioni generali, cataloghi grandi, URL cron.

## Passo 1 — Creare i fornitori

Nella scheda **Suppliers**, aggiungi un fornitore con il suo **nome**, la sua **priorità** (intero, `1` è la più alta e risolve gli EAN13 duplicati), lo stato **attivo** e l'opzione **Crea il fornitore nativo PrestaShop**, consigliata perché riempie anche il costo d'acquisto in `product_supplier`.

Assegna le priorità migliori (numeri più bassi) ai fornitori più affidabili o più economici: saranno loro a "possedere" i prodotti condivisi.

## Passo 2 — Creare il feed e lasciarlo analizzare

Nella scheda **Feeds**, crea il feed con il suo fornitore, il tipo di sorgente (_URL_ remoto o _file locale_ nella directory del negozio) e il formato. Salva, poi clicca sul pulsante **lente** nella riga del feed.

Il modulo scarica un campione e mostra l'`items_path` rilevato, l'elenco di tutti i campi realmente presenti con valori di esempio, e una mappatura completa precompilata modificabile prima di applicarla.

Le colonne foto numerate vengono raggruppate automaticamente, le colonne di taglie impacchettate, di colore e di riferimenti correlati riconosciute, e i nomi delle colonne identificati in italiano, inglese, francese, spagnolo e tedesco.

Verifica sempre la proposta prima di applicarla. Molti fornitori inviano un prezzo di vendita consigliato dove il modulo si aspetta un **costo d'acquisto**.

## Passo 3 — La mappatura dei campi

La mappatura è un oggetto JSON che collega le colonne o i nodi del feed a campi normalizzati. I 21 campi canonici sono:

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

Solo `reference` o `ean13` è obbligatorio: sono le due chiavi di corrispondenza.

### Più sorgenti per uno stesso campo

Il valore di un campo può essere un elenco. Un fornitore che distribuisce le foto su più colonne si mappa così:

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

Per il campo `images` vengono importate tutte le colonne valorizzate. Per ogni altro campo si tiene il primo valore non vuoto, il che permette una catena di ripiego.

### CSV

Collega ogni campo a un'**intestazione di colonna** o a un **indice di colonna** a partire da 0. Il delimitatore viene rilevato automaticamente, i campi multiriga tra virgolette sono gestiti.

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

Una riga il cui numero di colonne non corrisponde all'intestazione viene **rifiutata** e conteggiata come errore. Senza questo controllo, tutti i valori successivi sarebbero spostati e importati in silenzio.

### XML

`items_path` punta al nodo ripetuto, a qualsiasi profondità. I percorsi dei campi sono relativi a quel nodo e `@nome` legge un attributo.

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

Poiché i percorsi sono relativi all'articolo, un valore presente solo su un nodo antenato non può essere letto: la navigazione `..` non esiste.

### JSON

`items_path` usa la notazione con punti fino all'array di articoli. Un segmento numerico legge una voce: `images.0` è la prima immagine.

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

La scheda Feeds contiene sedici esempi commentati.

## Passo 4 — Definire i margini

Nella scheda **Margin rules**, ogni regola calcola il prezzo di vendita IVA esclusa a partire dal costo d'acquisto IVA esclusa: **percentuale** (`costo × (1 + valore/100)`), **coefficiente** (`costo × valore`) o **addizione fissa** (`costo + valore`). Viene poi applicato un **arrotondamento psicologico** opzionale.

### Ambito e risoluzione

Una regola può riguardare un fornitore, una categoria, entrambi o essere globale. Vince la più specifica, in questo ordine: fornitore + categoria, solo fornitore, solo categoria, regola globale. Le regole di categoria si applicano anche alle sottocategorie. Senza alcuna regola si usa il **margine predefinito**.

## La priorità EAN tra le fonti

Quando lo stesso `ean13` compare in più feed, il fornitore con la priorità migliore **possiede** il prodotto, le altre fonti vengono **ignorate** per quel riferimento, e se in seguito un fornitore con priorità migliore porta quell'EAN, **subentra automaticamente**.

## Le combinazioni

Sono gestite due strutture di feed.

### Una riga per variante

Attiva **Costruisci le combinazioni** e mappa `group_reference` (identico per tutte le varianti di uno stesso prodotto) e `attributes` (le opzioni, ad esempio `Taglia:M|Colore:Rosso`). Tra le coppie sono accettati `|`, `,` e `;`, tra nome e valore `:` o `=`.

### Una riga per prodotto, taglie impacchettate in una colonna

È la struttura più diffusa tra i grossisti di abbigliamento e lingerie:

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

Attiva **Dividi le varianti impacchettate** e mappa `variants_stock`, più `variants_ean` e `variants_reference` se il feed li fornisce. Il modulo divide la riga in una combinazione per taglia e abbina stock, EAN e riferimento **per etichetta**. Tre impostazioni accompagnano la casella: il **nome del gruppo di attributi** (`Taille` per impostazione predefinita), il **separatore tra le voci** (`,`) e il **separatore tra etichetta e valore** (`:`).

La divisione avviene sull'**ultima** occorrenza del separatore, così un'etichetta come `EU 70C | FR 85C` resta leggibile.

Spunta la casella **prima** della prima importazione. Se importi prima senza, i prodotti vengono creati senza `group_reference`: attivando poi la divisione, il modulo non trova quei prodotti padre e ne crea di nuovi, raddoppiando il catalogo.

### Un secondo asse da una colonna del feed

Molti fornitori inviano il colore in una colonna separata mentre le taglie sono impacchettate. Mappa `variant_attribute` su quella colonna:

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

Ogni combinazione del prodotto guadagna allora un secondo asse, sotto il **gruppo di attributi della colonna aggiuntiva** definito sul feed (`Couleur` per impostazione predefinita). Ottieni combinazioni di Taglia e Colore, utilizzabili dai filtri.

Poiché ogni riga del feed è un prodotto di un solo colore, il gruppo Colore ha un solo valore per prodotto. I colori non vengono fusi in una scheda unica con selettore: per navigare tra loro, usa i prodotti correlati.

## Prodotti correlati

Quando il feed elenca gli altri colori o i modelli associati in una colonna di riferimenti, spunta **Importa i prodotti correlati** e mappa `related`:

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

La colonna contiene un elenco di riferimenti fornitore separati da virgole. I collegamenti vengono creati come **accessori PrestaShop** e compaiono nel blocco prodotti correlati del tuo tema.

La risoluzione avviene **una volta letto l'intero feed**, perché un riferimento punta molto spesso a un prodotto situato più avanti nel file. Tre comportamenti da conoscere:

- un riferimento che punta al prodotto stesso viene ignorato, cosa frequente perché molti fornitori elencano l'intero gruppo su ogni membro;
- un riferimento che punta a un prodotto assente dal feed viene ignorato **senza contare come errore**: su un export filtrato per categoria questo riguarda abitualmente un quinto dei riferimenti;
- gli accessori esistenti non vengono **mai eliminati**, quindi i collegamenti aggiunti a mano sopravvivono. In cambio, un raggruppamento modificato dal fornitore lascia in essere i vecchi collegamenti.

Il numero di collegamenti creati appare nel messaggio di fine importazione e nella colonna dedicata del registro.

## Cosa il feed può sovrascrivere

Cinque caselle per feed decidono quali campi vengono sincronizzati: **prezzi**, **stock**, **nome**, **descrizioni**, **immagini**. Per impostazione predefinita solo prezzi e stock sono selezionati.

Se riscrivi le schede per il posizionamento, deseleziona nome e descrizioni dopo la prima importazione.

## Prodotti ritirati dal catalogo del fornitore

Ogni feed sceglie il proprio comportamento: non fare nulla, azzerare lo stock, disattivarli o entrambe le cose. L'azione si applica al termine di un'**importazione completa conclusa** e solo ai prodotti di quel feed.

Nel dropshipping, azzerare lo stock è la scelta più sicura: il prodotto non è più vendibile ma conserva URL e posizionamento.

## Categorie e valute

Il campo `category` accetta un nome semplice o un percorso completo, ad esempio `Home > Ufficio > Sedie`. Il separatore è configurabile per feed e l'opzione **Crea le categorie mancanti** crea i livelli assenti.

Se il fornitore fattura in un'altra valuta, selezionala sul feed: i costi vengono convertiti nella valuta predefinita del negozio.

## Cataloghi grandi

I feed vengono letti in streaming: la memoria usata non dipende dalla dimensione del file. L'elaborazione è divisa in lotti ripristinabili. Due impostazioni: **punto di ripristino ogni N articoli** (2000 per impostazione predefinita) e **budget di tempo per passata** (120 s).

La divisione moltiplica il volume: un feed di 7.300 prodotti con varianti produce oltre 33.000 combinazioni, quindi circa 41.000 oggetti alla prima importazione completa. Prevedi più passaggi e prova su un negozio di test.

## Lanciare un'importazione manualmente

- **Importazione completa** (icona play) — aggiorna i prodotti collegati e crea quelli mancanti se il feed lo consente.
- **Sync stock** (icona aggiorna) — aggiorna solo prezzi e quantità dei prodotti già collegati.

Dal back office una passata è limitata a 45 secondi per non superare il timeout del server web.

## Automatizzare con il cron

```
# Sync stock ogni ora
0 * * * * curl -sL "https://iltuonegozio.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=IL_TUO_TOKEN&mode=stock" > /dev/null

# Importazione completa ogni notte
30 3 * * * curl -sL "https://iltuonegozio.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=IL_TUO_TOKEN&mode=full" > /dev/null
```

Parametri opzionali: `&id_feed=N` e `&budget=600`.

Se rigeneri il token, aggiorna i tuoi cron: il vecchio URL restituirà un errore 403.

## Impostazioni generali

- **Prodotti creati attivi immediatamente** — disattivato per impostazione predefinita.
- **Disattivare i prodotti esauriti presso il fornitore**, con riattivazione al ritorno dello stock.
- **Margine predefinito** quando nessuna regola corrisponde.
- **Ritenzione dei registri** e purga automatica.
- **Alla disinstallazione** — eliminare i dati o conservare tutto.
- **Svuotare la cache dei feed e i cursori** nel pannello di manutenzione.

## Monitoraggio e registri

La scheda **Logs** elenca ogni esecuzione: feed, modalità, articoli elaborati, creati, aggiornati, ignorati, in errore, scomparsi, collegamenti tra prodotti creati, indicatore di completamento con il punto di ripresa, tempo di esecuzione e dettaglio dei primi errori.

## Risoluzione dei problemi

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

La riga contiene un separatore o una virgoletta non protetti in un campo di testo. Viene rifiutata.

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

Per una sorgente file, il percorso deve puntare a un file leggibile nella directory del negozio.

### L'analisi non trova articoli

Indica `items_path` manualmente nella mappatura e rilancia l'analisi.

### I prodotti vengono creati ma non si vedono nel front

È il comportamento predefinito: i prodotti creati sono disattivati.

### Le combinazioni non vengono create

Verifica che la casella corrispondente sia attiva, che i campi necessari siano mappati e che i separatori corrispondano al file.

### Il mio catalogo è raddoppiato dopo aver attivato la divisione

L'importazione è stata lanciata prima di spuntare la casella. Elimina i prodotti creati da quel feed, svuota i cursori e rilancia.

### Pochi o nessun prodotto correlato creato

I collegamenti vengono risolti solo al termine di un'importazione completa **conclusa**: su un feed grande elaborato in più passate, compaiono all'ultima. Verifica anche che i riferimenti della colonna corrispondano al campo mappato su `reference`.

### I prezzi sembrano troppo alti o troppo bassi

Verifica i costi IVA inclusa, la valuta, quale regola di margine si applica e che il campo mappato su `cost` sia un costo d'acquisto.

### L'importazione non finisce mai

È normale su un feed molto grande: avanza per passate.

## Compatibilità

- PrestaShop 8.0 fino a 9.x, PHP 7.4 fino a 8.3.
- Senza override del core PrestaShop.
- Multinegozio: i prodotti creati vengono associati ai negozi del contesto.
- Interfaccia tradotta in inglese e francese.
