- Patryk Marek
- News
- 0 подобається
- 483 погляди
- 0 коментарі
Імпорт XML без дублікатів починається зі сталого, однозначного ідентифікатора та збереженого зв’язку між записом постачальника і товаром у PrestaShop. Перед першим запуском визначте, що імпортер може створювати, які поля він оновлює і що означає відсутність товару в наступному файлі. Сам по собі коректний 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 потребують упорядкування даних — саме лише вказання поля не є гарантією відсутності помилок.
В аркуші мапи даних і сценаріїв запишіть правило на випадок відсутності зіставлення, кількох зіставлень і повторення. Для кожної спроби зберігайте ідентифікатор джерела та відповідний товар і комбінацію в магазині. Лише на цій основі оцінюйте результат наступного проходу.
Коментарі (0)