Menu
Кошик

Імпорт XML

Імпорт XML
Імпорт XML
Імпорт XML
Імпорт XML
Імпорт XML
2.x
Імпорт XML
Імпорт XML
Імпорт XML
Імпорт XML
Імпорт XML

Опис

Перед власником інтернет-магазину на опенкарт рано чи пізно виникає питання: як і чим обробити прайс (або прайси) постачальника, щоб оперативно і коректно оновити або додати товари в опенкарт?

Для вирішення подібних завдань існують різні модулі, які спеціалізуються на обробці якого-небудь формату: csv, yml тощо. Існують також модулі, які можуть обробляти прайси різних форматів і довільної структури, але навіть вони не можуть охопити всі можливі сценарії роботи з прайсами. Крім цого, такі «комбайни», зачасту, мають надлишковий функіонал і досить складний інтерфейс.

Для імпорту нестандартного прайсу краще створити окремий модуль: стабільний, швидкий, передбачуваний та не перевантажений налаштуваннями.

Даний модуль імпорту було написано для Opencart 2.3 за індивідуальним замовленням. Він призначений для імпорту великої кількості товарів і категорії з xml-файлу нестандартної структури (не вписується і стандарти прайс-агрегаторів).

Що маємо:

  • Розмір xml-файлу: близько 50Mb
  • Кількість категорій: більше 25 000
  • Кількість товарів: більше 55 000
  • Кількість зображень: більше 170 000 загальним розміром близько 15Gb

Що потрібно:

  • Ручний режим запуску імпорта з можливістю брати файл за посиланням
  • Відображення процесу обробки
  • Скачування нових зображень
  • Прийнятний час обробки прай-листа
  • Можливість задати категоріям з однаковими назвами однакові зображення (структура сайту побудована на категоріях – підкатегорії, як правило, мають однакові назви)
  • Можливість задати категоріям вище  першого рівня спеціальну схему (вид кореневих і дочірніх категорій відрізняється)
  • Оновлювати ціни і залишки товарів
  • Відключати категорії, яких немає в поточному прасі
  • Обнуляти товари (кількість = 0), яких немає в поточному прайсі

Головною проблемою при обробці великих прайсів є, звичайно ж, швидкість. Вона залежить від багатьох факторів: від кофігурації сервера до структури і кількості mysql-запитів в процесі імпорту. В даному випадку, проблема швидкості була пов’язана з великою кількістю зображень, які необхідно завантажувати. Якщо скачувати зображення товару безпосередньо під час обробки цього товару, то процес імпорту триватиме декілька годин (в кращому випадку), в гіршому – завершиться помилкою через обмеження сервера на час виконання.

Поширена помилка при вирішенні подібних завдань – це послідовна обробка всього і зразу (за один запуск скрипта). Такий підхід може створювати надмірне навантаження на сервер, а також значно підвищується ризик отримання різних помилок (Maximum execution time, 504 Gateway Timeout, Allowed memory size тощо). Напростіший спосіб уникнути таких помилок – використовувати технологію AJAX і обрбляти дані «порціями», а не все одразу. Більше того, завдяки асинхронності, дані обробляються в декілька потоків, що значно підвищує швидкість виконання у порівнянні з обробкою «всього одразу».

Що отримали в результаті:

  • Взаємодія користувача з сервером відбувається за допомогою техноголії AJAX.
  • Є можливість призначити схему підкатегоріям
  • Є можливість призначити картинку за назвою категорії
  • Відображається прогрес поточної операції
  • Процес імпорту відбувається в кілька етапів:
    • Парсинг файлу і формування масиву даних, які необхідно обробити.
    • Імпорт категорії. Нові додаються, існуючі оновлюються. Кожна «порція» даних, відправлених на сервер, - це коренева категорія з усіма дочірніми категоріями. Тобто, якщо є 20 кореневих категорій – буде 20 асинхронних ajax-запитів на сервер.
    • Обробка взаємозв’язків категорій (робити це окремим запитом значно швидше, ніж при обробці кожної категорії)
    • Імпорт товарів партіми по 10 000. Нові додаються, існуючі оновлюються.
    • Скачування зображень на сервер. Це відбувається партіями по 1 000 в 16 потоків. Багатопотоковість реалізовано за допомогою технології cURL Multi. Швидкість завантаження зображень – 1200-1500 за 1 хвилину. Швидкість можна підвищити, але тоді втрачається стабільність – є ризик отримати «биті» картинки нульового розміру. Звичайно, швидкість скачування залежить також і від можливостей веб-сервера.
    • Відключення відсутніх категорій та обнулення відсутніх товарів.
    • Завершення імпорту і формування результатів
  • Первинний імпорт тривав трохи більше 1 години
  • Наступні запуски для актуалізації інформації на сайті тривають не більше 10 хвилин. Якщо нових зображень нема або їх мало, то 3-4 хвилини.

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

Якщо Вам потрібен модуль імпорту опенкарт (схожий чи з абсолютно іншим набором функціоналу) для будь-якої версії Опенкарт – звертайтесь до нас, допоможемо опрацювати прайс будь-якої складності.

Відгуки

Написати відгук

Примітка: HTML розмітка не підтримується! Використовуйте звичайний текст.
Погано Добре
Captcha
Ви не можете купити цей модуль
Ви не можете купити цей модуль
Але ви можете замовити аналогічний модуль для свого сайту. Цей модуль створено за індивідуальним замовленням клієнта з урахуванням особливостей його сайту та особливостей його бізнес-процесів. Якщо вам потрібен такий же модуль (або будь-який інший) - просто напишіть мені.
Сумісність
Версія OpenCart2.3