Імпорт XML без дублікатів починається зі сталого, однозначного ідентифікатора та збереженого зв’язку між записом постачальника і товаром у PrestaShop. Перед першим запуском визначте, що імпортер може створювати, які поля він оновлює і що означає відсутність товару в наступному файлі. Сам по собі коректний XML не дає відповіді на ці запитання.

Два вихідні файли XML і впорядкований каталог товарів без дублікатів

Посібник призначений для магазинів, які планують імпорт з гуртівні або іншої системи. Два невеликі демонстраційні файли показують, як відрізнити новий товар, зміну даних і відсутність запису. Вони не є фідом реального постачальника і не є універсальним форматом, який підтримує кожен імпортер.

1. Виберіть систему, відповідальну за кожне поле

Спочатку вирішіть, звідки походить правильна ціна, залишок, назва і опис. Часто гуртівня відповідає за наявність і закупівельну ціну, а магазин підтримує власний опис і ціну продажу, розраховану за правилом. Якщо імпортер перезаписує всі поля під час кожного оновлення, він може видалити редакційну роботу, виконану в магазині.

Приклад відповідальності за дані
ПолеДжерело в прикладіПравило оновлення
Вихідний ідентифікаторПостачальник.Сталий ключ зв’язку в межах даного джерела.
ЗалишокПостачальник.Оновлюється після коректного зчитування даних.
Вхідна цінаПостачальник.Із зазначеною валютою та інформацією нетто/брутто.
Ціна продажуПравило магазину.Розраховується за узгодженим перерахунком і податками.
Опис і SEOРедакція магазину.Не перезаписуємо без окремого рішення.
КатегоріяМапа категорій.Зв’язок категорії постачальника з категорією магазину.

За наявності багатьох постачальників також уточніть, чи пропонують вони той самий товар, чи окремі пропозиції. Робота з багатьма джерелами не означає автоматично підсумовування залишків, вибір найнижчої ціни або перемикання постачальника. Таке правило потрібно спроєктувати, а потім підтвердити в конкретному рішенні.

2. Не плутайте ID постачальника з ID товару в магазині

Запис A-100 в XML може відповідати товару 501 у PrestaShop. Ці номери не обов’язково мають бути однаковими. Імпортер повинен знати їхній зв’язок і використовувати його під час наступного зчитування. Створення нової картки при кожній зміні назви є помилкою моделі ідентифікації.

Ідентифікатор має бути стабільним у часі та однозначним у вибраному діапазоні. Якщо дві гуртівні використовують номер 100, безпечний зв’язок повинен враховувати джерело, а не лише це число. Також не припускайте, що EAN завжди доступний і унікальний: у файлі можуть бути пропуски, помилки або повтори, які потребують пояснення.

Як оцінити кандидата на ключ зіставлення?
ПолеЩо перевіритиРизик без цієї перевірки
ID постачальникаЧи є він сталим, унікальним і чи розрізняє товар від варіанта.Нові картки після зміни нумерації або злиття різних пропозицій.
Артикул / referenceЧи не повторюється він у каталозі і чи зберігаєте ви початкові нулі.Зіставлення з неправильним товаром.
EAN / GTINНаявність, коректність і діапазон — одиниця, варіант чи упаковка.Колізії або зіставлення різних одиниць продажу.
НазваЧи не змінюється вона і чи не зустрічається у багатьох товарів.Дублікати після коригування назви; зазвичай слабкий технічний ключ.
ID PrestaShopЧи джерело справді знає ідентифікатори цієї інсталяції.Випадкове потрапляння в інший товар після міграції або зміни магазину.

Перед першим зіставленням з наявним каталогом підготуйте звіт про відсутні та повторювані ключі. Не вибирайте автоматично «перший знайдений» товар, якщо існують дві картки з тим самим артикулом.

3. Товар і варіант потребують окремих правил

Одна картка товару може мати кілька комбінацій, кожна з власним залишком, артикулом, зображенням або впливом на ціну. Визначте, чи запис XML описує всю картку, чи окремий варіант. Якщо постачальник передає окремі розміри як окремі записи, їх об’єднання в одну картку потребує правила групування.

Також перевірте значення ціни варіанта: це може бути повна ціна або різниця відносно базового товару. Використання різниці як кінцевої ціни дає неправильний результат. Подібна обережність стосується наборів атрибутів — зміна назви кольору не повинна без рішення створювати ще один варіант.

Якщо імпортер синхронізує повний набір комбінацій, визначте, чи варіанти, відсутні у файлі, мають бути збережені, вимкнені чи видалені. Це особливо важливо, коли частину варіантів магазин підтримує самостійно.

4. Дві версії XML і очікуваний результат

Наведену нижче структуру підготовлено виключно для демонстрації. Ціни є вхідними цінами нетто в PLN. У прикладі ми не створюємо варіанти; кожен запис відповідає одній картці товару. Парсер або адаптер конкретного імпортера має бути пристосований до реальної структури джерела.

Перший повний файл


  
    DEMO-BUTELKA
    Butelka oliwkowa
    50.00
    12
  
  
    DEMO-KUBEK
    Kubek kremowy
    20.00
    8
  

Наступний повний файл


  
    DEMO-BUTELKA
    Butelka oliwkowa
    55.00
    0
  
  
    DEMO-KOC
    Koc beżowy
    40.00
    5
  

Атрибут complete="true" є частиною нашого прикладу, а не стандартною гарантією повноти XML. У реальному впровадженні потрібно визначити, як постачальник підтверджує повноту і як імпортер її розпізнає.

Це очікувані результати сценарію, а не результат запущеного імпорту. Номери товарів у магазині є прикладними. Два наведені вище файли мають наочну схему ; вони не є вхідними файлами прикладного адаптера модуля.

Очікувані операції після другого файлу
Вихідний записПриклад зв’язку в магазиніОчікуваний результат
demo / A-100Наявний товар 501.Оновлення вхідної ціни 50 → 55 і залишку 12 → 0; без нової картки.
demo / A-200Наявний товар 502.Відсутній у джерелі: у цій демонстрації залишаємо без змін і позначаємо для контролю.
demo / A-300Немає попереднього зв’язку.Створення нової картки і збереження зв’язку, якщо створення увімкнене.

Повторна обробка того самого коректного файлу не повинна створювати ще одну пляшку або ще один плед. Порівняння після другого запуску є простим критерієм приймання зіставлення. Для імпортера, який пропускає незмінені записи, правильним результатом також може бути їх пропуск.

Окрема спроба мапування в коді модуля 2.0.5

27 вересня ми перевірили в пам’яті метод SampleAdapter::mapProduct() на трьох невеликих XML-файлах, на PHP 7.0 і 8.1. Цей адаптер очікує структуру та полів nazwa, cena_netto і stan_magazynowy. Це відрізняється від наочної схеми вище. Ми не виконували завантаження URL або імпорт до бази магазину.

Фактичний результат локального мапування, без запису товарів
СпробаВхідні даніРезультат методу
Перший файлA-100: 50.00 нетто, залишок 12; A-200: 20.00 нетто, залишок 8; одна пропозиція без ID.Два масиви даних для A-100 і A-200; пропозиція без ID повернула false.
Другий файлA-100: 55.00 нетто, залишок 0; A-300: 40.00 нетто, залишок 5. Немає A-200.Масиви даних для A-100 і A-300. Метод не вирішує, що робити з відсутнім A-200.
Ціна з комоюA-400: 19,99 нетто.Прикладний адаптер повернув 19, тобто помилкове значення відносно задуманої ціни. Для цього адаптера цінові зразки потребують крапки або виправлення мапування.

Завантажте дані та збережені результати спроби мапування (ZIP, 4,4 kB): три XML-файли, результати PHP 7.0 і 8.1 та інструкція порівняння. Це матеріали з описаної спроби від 27.09.2026, опубліковані 28.09.2026. Пакет не містить модуля або конфігурації для повного імпорту. Результат 19,99 → 19 документує помилку формату ціни, а не правильну ціну.

Межа спроби: це результат мапування полів, а не доказ створення або оновлення карток, обробки варіантів чи відсутності дублікатів після повторного імпорту. SampleAdapter виключений із вибору в панелі і сам позначений як приклад, непридатний для продакшну. Не запускайте повний імпорт короткого зразка на наявному джерелі: правило для товарів, відсутніх у файлі, може змінити стан каталогу. Повне приймання потребує ізольованої копії магазину, підтвердження повноти фіду і порівняння карток до та після проходу.

5. Відсутність запису не завжди означає відсутність товару

Товар може зникнути з повного каталогу, але також може не з’явитися у файлі, що містить лише зміни. Порожній файл, помилка входу, часткове завантаження або незавершений імпорт — це ще інші ситуації. Вони не повинні автоматично призводити до вимкнення всього асортименту.

Перед виконанням операцій для відсутніх товарів підтвердьте коректне завантаження, зчитування і завершення правильного типу імпорту. Також визначте діапазон: лише картки, пов’язані з цим джерелом. Зникнення запису гуртівні A не повинно самостійно змінювати вручну доданий товар або пропозицію гуртівні B.

У прикладі ми залишаємо відсутню чашку для контролю, щоб показати різницю між відсутністю інформації та явним нульовим залишком. Це вибране правило демонстрації, а не налаштування, правильне для кожного магазину. Для продакшну рішення потрібно пов’язати з характером джерела і ризиком продажу недоступного товару.

6. Повний імпорт і швидке оновлення

У коді Import hurtownia Pro / pdxmlimport 2.0.4 повний імпорт і швидке оновлення мають різний обсяг. Повний шлях може створювати товари й оновлювати дані, які обробляє адаптер, відповідно до конфігурації. Швидке оновлення стосується цін і кількості базових товарів, уже пов’язаних із джерелом; це не шлях для створення нових карток або оновлення залишків окремих комбінацій.

Не припускайте, що перемикачі перезапису назв і описів контролюють кожну операцію модуля. Перед налаштуванням розкладу вкажіть точну дію, джерело і обсяг. Зміна цінового правила також може вимагати повторної обробки даних, навіть якщо XML не змінився.

Якщо вам потрібне лише оновлення наявних карток із CSV, дивіться окремі посібники про ціни і про залишки. Вибір формату повинен випливати з даних і операцій, які справді потрібно виконувати.

7. Розклад — лише після перевірки результату

Першу спробу виконайте на невеликому, репрезентативному наборі, що охоплює новий товар, уже пов’язаний товар, відсутність ідентифікатора, колізію і варіанти. Порівняйте кількість доданих, змінених, пропущених і помилкових записів. Відкрийте картки товарів і перевірте ціну продажу, залишок, зображення та мапування категорій.

Лише потім налаштовуйте порядок завантаження і обробки партій та частоту CRON. Розклад повинен враховувати публікацію файлу постачальником і фактичний час імпорту. Визначте, хто реагує на помилку і як розпізнає незавершений прохід. Сам по собі запуск адреси CRON не є доказом оновлення всього каталогу.

Надішліть зразок структури XML без конфіденційних даних і опишіть правила оновлення. Після перевірки полів і варіантів можна визначити обсяг імпорту та експорту даних PrestaShop. Якщо наявний адаптер підтримує цю структуру, перевірте Import hurtownia Pro; інше компонування даних потребує адаптації і спроби на копії магазину.

Імпорт каталогу не означає автоматично надсилання замовлень до гуртівні, резервування товару або двосторонню синхронізацію. Ці потреби слід окремо включити до обсягу інтеграції.

Перевірка первинного тексту: 13 вересня 2026 року в коді pdxmlimport 2.0.4. Окрема спроба мапування: 27 вересня 2026 року в локальному коді 2.0.5 на PHP 7.0 і 8.1, без імпорту до магазину. XML-файли і номери товарів є демонстраційними; вони не містять даних або структури захищеного фіду гуртівні.

Перш ніж покладатися на код постачальника, перевірте його унікальність

У коді імпортера XML 2.0.5 збережені для джерела зв’язки та опціональне зіставлення за кодами виконують різні завдання. За кількох результатів зіставлення імпортер може записати попередження і вибрати перший результат. Тому повторюваний EAN або reference потребують упорядкування даних — саме лише вказання поля не є гарантією відсутності помилок.

В аркуші мапи даних і сценаріїв запишіть правило на випадок відсутності зіставлення, кількох зіставлень і повторення. Для кожної спроби зберігайте ідентифікатор джерела та відповідний товар і комбінацію в магазині. Лише на цій основі оцінюйте результат наступного проходу.

Супутні товари

Інтеграції з оптовими постачальниками
Імпорт гуртівні Pro – імпорт товарів з XML до PrestaShop
PrestaDev.pl
IMPORTXMLPRO
492,00 zł 400,00 złnetto
3 Відгуки
Імпорт гуртівня Pro — це модуль PrestaShop для створення та оновлення товарів на основі даних XML, наданих гуртівнею або іншим постачальником каталогу. Дозволяє використовувати кілька джерел даних, з окремими налаштуваннями та зіставленням для кожного з них. Залежно від вмісту файлу та підтримки його структури імпорт може охоплювати назви, описи, ціни,...
Див. статті автора
Patryk Marek

Патрик Марек — власник PrestaDev.pl і програміст, який спеціалізується на PrestaShop. Уже багато років займається створенням, розвитком і підтримкою інтернет-магазинів. Поєднує роботу над кодом магазину та модулів із налаштуванням серверного середовища, у якому працюють ці рішення.

Проєктує та розвиває модулі PrestaShop, адаптує наявні функції, а також готує інтеграції з оптовими складами та зовнішніми сервісами. Працює над імпортом і оновленням даних про товари, автоматизацією обслуговування каталогу, процесом оформлення замовлення та інструментами, що підтримують щоденну роботу власника магазину.

Його досвід також охоплює оновлення та міграції магазинів, діагностику помилок, аналіз продуктивності, а також налаштування серверів і сервісів, необхідних для роботи PrestaShop. Під час розв’язання проблем враховує залежності між модулями, темою, PHP, базою даних і налаштуваннями хостингу.

У блозі ділиться знаннями, що випливають із багаторічної програмістської практики та роботи з технічним бекендом магазинів. Посібники зосереджені на конкретних проблемах, способах їх перевірки та обмеженнях описаних рішень. Вони допомагають власникам магазинів і технічним спеціалістам підготувати зміни, оцінити їх обсяг і перевірити результат.

Коментарі (0)

На даний момент немає коментарів

Новий коментар

Ви відповідаєте на коментар