Import XML bez duplikatów zaczyna się od stałego, jednoznacznego identyfikatora oraz zapisanej relacji między rekordem dostawcy a produktem w PrestaShop. Przed pierwszym uruchomieniem ustal, co importer może tworzyć, które pola aktualizuje i co oznacza brak produktu w kolejnym pliku. Sam poprawny XML nie daje odpowiedzi na te pytania.

Dwa źródłowe pliki XML i uporządkowany katalog produktów bez duplikatów

Poradnik jest przeznaczony dla sklepów planujących import z hurtowni lub innego systemu. Dwa małe pliki demonstracyjne pokazują, jak odróżnić nowy produkt, zmianę danych i brak rekordu. Nie są feedem rzeczywistego dostawcy ani uniwersalnym formatem obsługiwanym przez każdy importer.

1. Wybierz system odpowiedzialny za każde pole

Najpierw zdecyduj, skąd pochodzi prawidłowa cena, stan, nazwa i opis. Często hurtownia odpowiada za dostępność oraz cenę zakupu, a sklep utrzymuje własny opis i cenę sprzedaży wyliczaną według reguły. Jeśli importer nadpisze wszystkie pola przy każdej aktualizacji, może usunąć pracę redakcyjną wykonaną w sklepie.

Przykładowa odpowiedzialność za dane
PoleŹródło w przykładzieZasada aktualizacji
Identyfikator źródłowyDostawca.Trwały klucz powiązania w obrębie danego źródła.
StanDostawca.Aktualizowany po poprawnym odczycie danych.
Cena wejściowaDostawca.Z określoną walutą i informacją netto/brutto.
Cena sprzedażyReguła sklepu.Wyliczana według uzgodnionego przeliczenia i podatków.
Opis i SEORedakcja sklepu.Nie nadpisujemy bez osobnej decyzji.
KategoriaMapa kategorii.Powiązanie kategorii dostawcy z kategorią sklepu.

Przy wielu dostawcach doprecyzuj również, czy oferują ten sam towar, czy oddzielne oferty. Obsługa wielu źródeł nie oznacza automatycznie sumowania stanów, wybierania najniższej ceny ani przełączania dostawcy. Taka reguła wymaga zaprojektowania, a następnie potwierdzenia w konkretnym rozwiązaniu.

2. Nie myl ID dostawcy z ID produktu w sklepie

Rekord A-100 w XML może odpowiadać produktowi 501 w PrestaShop. Te numery nie muszą być identyczne. Importer powinien znać ich powiązanie i wykorzystać je przy kolejnym odczycie. Tworzenie nowej karty przy każdej zmianie nazwy jest błędem modelu identyfikacji.

Identyfikator musi być stabilny w czasie oraz jednoznaczny w wybranym zakresie. Jeżeli dwie hurtownie używają numeru 100, bezpieczne powiązanie powinno uwzględniać źródło, a nie wyłącznie tę liczbę. Nie zakładaj też, że EAN zawsze jest dostępny i unikalny: w pliku mogą istnieć braki, błędy lub powtórzenia wymagające wyjaśnienia.

Jak ocenić kandydata na klucz dopasowania?
PoleCo sprawdzićRyzyko bez tej kontroli
ID dostawcyCzy jest trwałe, unikalne i rozróżnia produkt od wariantu.Nowe karty po zmianie numeracji lub scalenie różnych ofert.
Indeks / referenceCzy nie powtarza się w katalogu i czy zachowujesz zera wiodące.Dopasowanie do niewłaściwego produktu.
EAN / GTINObecność, poprawność i zakres — sztuka, wariant czy opakowanie.Kolizje albo dopasowanie różnych jednostek sprzedaży.
NazwaCzy nie zmienia się i nie występuje przy wielu produktach.Duplikaty po korekcie nazwy; zwykle słaby klucz techniczny.
ID PrestaShopCzy źródło rzeczywiście zna identyfikatory tej instalacji.Przypadkowe trafienie w inny produkt po migracji lub zmianie sklepu.

Przed pierwszym dopasowaniem do istniejącego katalogu przygotuj raport brakujących i powtarzających się kluczy. Nie wybieraj automatycznie „pierwszego znalezionego” produktu, jeżeli istnieją dwie karty z tym samym indeksem.

3. Produkt i wariant potrzebują odrębnych zasad

Jedna karta produktu może mieć kilka kombinacji, każdą z własnym stanem, indeksem, zdjęciem lub wpływem na cenę. Ustal, czy rekord XML opisuje całą kartę, czy pojedynczy wariant. Jeśli dostawca przesyła osobne rozmiary jako osobne rekordy, ich połączenie w jedną kartę wymaga reguły grupowania.

Sprawdź również znaczenie ceny wariantu: może być pełną ceną albo różnicą względem produktu bazowego. Użycie różnicy jako ceny końcowej daje nieprawidłowy wynik. Podobna ostrożność dotyczy zestawów atrybutów — zmiana nazwy koloru nie powinna bez decyzji tworzyć kolejnego wariantu.

Jeśli importer synchronizuje pełny zestaw kombinacji, ustal, czy warianty nieobecne w pliku mają zostać zachowane, wyłączone czy usunięte. Jest to szczególnie ważne, gdy część wariantów sklep utrzymuje samodzielnie.

4. Dwie wersje XML i oczekiwany wynik

Poniższa struktura została przygotowana wyłącznie do demonstracji. Ceny są cenami wejściowymi netto w PLN. W przykładzie nie tworzymy wariantów; każdy rekord odpowiada jednej karcie produktu. Parser lub adapter konkretnego importera musi zostać dopasowany do rzeczywistej struktury źródła.

Pierwszy pełny plik

<catalog source="demo" currency="PLN" price_type="net" complete="true">
  <product supplier_id="A-100">
    <reference>DEMO-BUTELKA</reference>
    <name>Butelka oliwkowa</name>
    <price>50.00</price>
    <quantity>12</quantity>
  </product>
  <product supplier_id="A-200">
    <reference>DEMO-KUBEK</reference>
    <name>Kubek kremowy</name>
    <price>20.00</price>
    <quantity>8</quantity>
  </product>
</catalog>

Kolejny pełny plik

<catalog source="demo" currency="PLN" price_type="net" complete="true">
  <product supplier_id="A-100">
    <reference>DEMO-BUTELKA</reference>
    <name>Butelka oliwkowa</name>
    <price>55.00</price>
    <quantity>0</quantity>
  </product>
  <product supplier_id="A-300">
    <reference>DEMO-KOC</reference>
    <name>Koc beżowy</name>
    <price>40.00</price>
    <quantity>5</quantity>
  </product>
</catalog>

Atrybut complete="true" jest częścią naszego przykładu, nie standardową gwarancją kompletności XML. W rzeczywistym wdrożeniu trzeba ustalić, jak dostawca potwierdza kompletność i jak importer ją rozpoznaje.

To są oczekiwane wyniki scenariusza, nie wynik uruchomionego importu. Numery produktów w sklepie są przykładowe. Dwa powyższe pliki mają schemat poglądowy <catalog>; nie są plikami wejściowymi przykładowego adaptera modułu.

Oczekiwane operacje po drugim pliku
Rekord źródłowyPrzykładowe powiązanie w sklepieOczekiwany wynik
demo / A-100Istniejący produkt 501.Aktualizacja ceny wejściowej 50 → 55 i stanu 12 → 0; bez nowej karty.
demo / A-200Istniejący produkt 502.Brak w źródle: w tej demonstracji pozostawiamy bez zmian i oznaczamy do kontroli.
demo / A-300Brak wcześniejszego powiązania.Utworzenie nowej karty i zapis powiązania, jeśli tworzenie jest włączone.

Ponowne przetworzenie tego samego poprawnego pliku nie powinno tworzyć następnej butelki ani następnego koca. Porównanie po drugim uruchomieniu jest prostym kryterium odbioru dopasowania. Dla importera pomijającego niezmienione rekordy prawidłowym wynikiem może być także ich pominięcie.

Osobna próba mapowania w kodzie modułu 2.0.5

27 września sprawdziliśmy w pamięci metodę SampleAdapter::mapProduct() na trzech małych plikach XML, na PHP 7.0 i 8.1. Ten adapter oczekuje struktury <offers><offer id="..."> oraz pól nazwa, cena_netto i stan_magazynowy. Różni się to od poglądowego schematu <catalog> powyżej. Nie wykonaliśmy pobrania URL ani importu do bazy sklepu.

Rzeczywisty wynik lokalnego mapowania, bez zapisu produktów
PróbaDane wejścioweWynik metody
Pierwszy plikA-100: 50.00 netto, stan 12; A-200: 20.00 netto, stan 8; jedna oferta bez ID.Dwie tablice danych dla A-100 i A-200; oferta bez ID zwróciła false.
Drugi plikA-100: 55.00 netto, stan 0; A-300: 40.00 netto, stan 5. Brak A-200.Tablice danych dla A-100 i A-300. Metoda nie decyduje, co zrobić z nieobecnym A-200.
Cena z przecinkiemA-400: 19,99 netto.Przykładowy adapter zwrócił 19, czyli błędną wartość względem zamierzonej ceny. Dla tego adaptera próbki cenowe wymagają kropki lub poprawy mapowania.

Pobierz dane i zapisane wyniki próby mapowania (ZIP, 4,4 kB): trzy pliki XML, wyniki PHP 7.0 i 8.1 oraz instrukcja porównania. To materiały z opisanej próby z 27.09.2026, udostępnione 28.09.2026. Paczka nie zawiera modułu ani konfiguracji do pełnego importu. Wynik 19,99 → 19 dokumentuje błąd formatu ceny, a nie prawidłową cenę.

Granica próby: to wynik mapowania pól, a nie dowód utworzenia albo aktualizacji kart, obsługi wariantów czy braku duplikatów po ponownym imporcie. SampleAdapter jest wyłączony z wyboru w panelu i sam oznaczony jako przykład niewłaściwy do produkcji. Nie uruchamiaj pełnego importu krótkiej próbki na istniejącym źródle: reguła dla produktów nieobecnych w pliku może zmienić stan katalogu. Pełen odbiór wymaga odizolowanej kopii sklepu, potwierdzenia kompletności feedu i porównania kart przed oraz po przebiegu.

5. Brak rekordu to nie zawsze brak towaru

Produkt może zniknąć z pełnego katalogu, ale może też nie wystąpić w pliku zawierającym wyłącznie zmiany. Pusty plik, błąd logowania, częściowe pobranie lub nieukończony import to jeszcze inne sytuacje. Nie powinny automatycznie prowadzić do wyłączenia całego asortymentu.

Przed wykonaniem operacji dla brakujących produktów potwierdź poprawne pobranie, odczyt i zakończenie właściwego typu importu. Ustal też zakres: tylko karty powiązane z tym źródłem. Zniknięcie rekordu hurtowni A nie powinno samoczynnie modyfikować ręcznie dodanego produktu lub oferty hurtowni B.

W przykładzie pozostawiamy brakujący kubek do kontroli, aby pokazać różnicę między brakiem informacji a jawnym stanem zero. To wybrana zasada demonstracji, nie ustawienie właściwe dla każdego sklepu. Dla produkcji decyzję trzeba powiązać z charakterem źródła i ryzykiem sprzedaży niedostępnego towaru.

6. Pełny import a szybka aktualizacja

W kodzie Import hurtownia Pro / pdxmlimport 2.0.4 pełny import i szybka aktualizacja mają różny zakres. Pełna ścieżka może tworzyć produkty i aktualizować dane obsługiwane przez adapter zgodnie z konfiguracją. Szybka aktualizacja dotyczy cen i ilości produktów bazowych już powiązanych ze źródłem; nie jest ścieżką tworzenia nowych kart ani aktualizacji stanów poszczególnych kombinacji.

Nie zakładaj, że przełączniki nadpisywania nazw i opisów kontrolują każdą operację modułu. Przed harmonogramem wskaż dokładną akcję, źródło i zakres. Zmiana reguły cenowej może także wymagać ponownego przetworzenia danych mimo niezmienionego XML.

Jeżeli potrzebujesz wyłącznie aktualizacji istniejących kart z CSV, zobacz oddzielne poradniki o cenach i o stanach. Wybór formatu powinien wynikać z danych i operacji, które rzeczywiście trzeba wykonywać.

7. Harmonogram dopiero po kontroli wyniku

Pierwszą próbę wykonaj na małym, reprezentatywnym zestawie obejmującym nowy produkt, produkt już powiązany, brak identyfikatora, kolizję i warianty. Porównaj liczbę dodanych, zmienionych, pominiętych i błędnych rekordów. Otwórz karty produktów i sprawdź cenę sprzedaży, stan, zdjęcia oraz mapowanie kategorii.

Dopiero potem ustaw kolejność pobierania i przetwarzania partii oraz częstotliwość CRON. Harmonogram powinien uwzględniać publikację pliku przez dostawcę i rzeczywisty czas importu. Ustal, kto reaguje na błąd oraz jak rozpoznaje nieukończony przebieg. Samo uruchomienie adresu CRON nie jest dowodem aktualizacji całego katalogu.

Prześlij próbkę struktury XML bez danych poufnych i opisz zasady aktualizacji. Po sprawdzeniu pól oraz wariantów można ustalić zakres importu i eksportu danych PrestaShop. Jeśli istniejący adapter obsługuje tę strukturę, sprawdź Import hurtownia Pro; inny układ danych wymaga dopasowania i próby na kopii sklepu.

Import katalogu nie oznacza automatycznie wysyłania zamówień do hurtowni, rezerwacji towaru ani dwukierunkowej synchronizacji. Te potrzeby należy osobno umieścić w zakresie integracji.

Weryfikacja pierwotnego tekstu: 13 września 2026 w kodzie pdxmlimport 2.0.4. Osobna próba mapowania: 27 września 2026 w lokalnym kodzie 2.0.5 na PHP 7.0 i 8.1, bez importu do sklepu. Pliki XML i numery produktów są demonstracyjne; nie zawierają danych ani struktury chronionego feedu hurtowni.

Zanim polegasz na kodzie dostawcy, sprawdź jego unikalność

W kodzie importera XML 2.0.5 relacje zapisane dla źródła oraz opcjonalne dopasowanie po kodach wykonują różne zadania. Przy kilku wynikach dopasowania importer może zapisać ostrzeżenie i wybrać pierwszy wynik. Dlatego powtarzający się EAN lub referencja wymagają uporządkowania danych — samo wskazanie pola nie jest gwarancją braku pomyłek.

W arkuszu mapy danych i scenariuszy zapisz regułę na przypadek braku dopasowania, kilku dopasowań i ponowienia. Dla każdej próby zachowaj identyfikator źródła oraz właściwy produkt i kombinację w sklepie. Dopiero na tej podstawie oceniaj wynik kolejnego przebiegu.

8. Jak sprawdzać pobranie próbki i wynik importu

Udostępniona paczka z próbą mapowania XML ma 4458 bajtów i SHA-256 6530346c85c22fc0665533dc8f76e82aaa86019fde6a73c437f66f362b483f3b. To pozwala porównać, czy pobrany plik jest tym samym materiałem, który opisuje artykuł. Sama zgodność pliku ZIP nadal nie oznacza, że wykonano import w sklepie.

Co potwierdza każdy etap sprawdzenia próbki XML?
EtapCo potwierdzaCzego nie potwierdza
Pobranie ZIPPobrano właściwy plik z publicznego załącznika i można porównać jego SHA.Nie potwierdza działania importera ani utworzenia produktów.
Payload pomiarowyPo zgodzie analitycznej przeglądarka wysłała zdarzenie pobrania, a kolektor odpowiedział HTTP 204.HTTP 204 nie oznacza jeszcze wiersza w raporcie GA4 ani konwersji.
Raport GA4Pokazuje tylko zdarzenia przetworzone i widoczne w raportowaniu.Brak wiersza nie opisuje automatycznie przyczyny: możliwe jest przetwarzanie, filtrowanie albo ograniczenie konfiguracji.
Import na kopii sklepuDopiero ten etap pokazuje, które karty, ceny, stany i błędy powstały po przebiegu.Nie wolno zastępować go samym mapowaniem pól albo pobraniem próbki.

03.10.2026 wykonano techniczny test publicznego pobrania tego ZIP-u. Plik został pobrany, a zdarzenie pomiarowe miało odpowiedź HTTP 204, ale odczyty GA4 w tym samym etapie nadal nie pokazały raportowego content_download ani file_download. Wniosek praktyczny: przy odbiorze rozdzielaj dostępność pliku, transport zdarzenia, raport analityczny i faktyczny wynik importu. Nie traktuj jednego z tych etapów jako dowodu pozostałych.

Powiązane produkty

Integracje z hurtowniami
Import hurtownia Pro – import produktów z XML do PrestaShop
PrestaDev.pl
IMPORTXMLPRO
492,00 zł 400,00 złnetto
3 Recenzję
Import hurtownia Pro to moduł PrestaShop do tworzenia i aktualizacji produktów na podstawie danych XML udostępnianych przez hurtownię lub innego dostawcę katalogu. Pozwala prowadzić kilka źródeł danych, z osobnymi ustawieniami i mapowaniem dla każdego z nich. W zależności od zawartości pliku i obsługi jego struktury import może obejmować nazwy, opisy,...
Zobacz artykuły autora
Patryk Marek

Patryk Marek — właściciel PrestaDev.pl i programista specjalizujący się w PrestaShop. Od wielu lat zajmuje się tworzeniem, rozwojem i utrzymaniem sklepów internetowych. Łączy pracę nad kodem sklepu i modułów z konfiguracją środowiska serwerowego, w którym te rozwiązania działają.

Projektuje i rozwija moduły PrestaShop, dostosowuje istniejące funkcje oraz przygotowuje integracje z hurtowniami i usługami zewnętrznymi. Pracuje nad importem i aktualizacją danych produktów, automatyzacją obsługi katalogu, przebiegiem zamówienia oraz narzędziami wspierającymi codzienną pracę właściciela sklepu.

Jego doświadczenie obejmuje również aktualizacje i migracje sklepów, diagnozowanie błędów, analizę wydajności oraz konfigurację serwerów i usług potrzebnych do działania PrestaShop. Przy rozwiązywaniu problemów uwzględnia zależności między modułami, motywem, PHP, bazą danych i ustawieniami hostingu.

Na blogu dzieli się wiedzą wynikającą z wieloletniej praktyki programistycznej i pracy z zapleczem technicznym sklepów. Poradniki skupiają się na konkretnych problemach, sposobach ich sprawdzenia i ograniczeniach opisywanych rozwiązań. Pomagają właścicielom sklepów oraz osobom technicznym przygotować zmiany, ocenić ich zakres i zweryfikować rezultat.

Komentarze (0)

Brak komentarzy w tej chwili

Nowy komentarz

Odpowiadasz na komentarz