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. Новые добавляются, существующие обновляются.
    • Скачивание изображений на сервер. Это происходит партиями по 1000 штук в 16 потоков. Многопоточность реализована с помощью технологии cURL Multi. Скорость загрузки изображений – 1200-1500 за 1 минуту. Скорость можно поднять ещё выше, но тогда теряется стабильность – есть риск получить «битые» картинки с нулевым размером. Разумеется, скорость скачивания зависит также и от возможностей веб-сервера.
    • Отключение отсутствующих категорий и обнуление отсутствующих товаров.
    • Завершение импорта и формирование результатов.
  • Первичный импорт длился немного больше 1 часа
  • Последующие запуски для актуализации информации на сайте длятся не более 10 минут. Если новых изображений нет или их мало, то 3-4 минуты.

Эта реализация импорта XML в опенкарт, конечно же, не претендует на звание самой правильной и самой быстрой, поскольку может быть огромное количество других способов реализации импорта данных, и скорость может быть выше – всё зависит от конкретной ситуации. Здесь такой подход себя полностью оправдал, и все остались довольны результатом.

Если Вам необходим модуль импорта опенкарт (подобный или с совершенно другим набором функционала) для любой из версий опенкарт – обратитесь к нам, поможем обработать прайс любой сложности.

Отзывы

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
Плохо Хорошо
Защита от роботов
Вы не можете купить этот модуль
Вы не можете купить этот модуль
Но вы можете заказать аналогичной модуль для своего сайта. Этот модуль создан по индивидуальному заказу клиента с учетом особенностей его сайта и особенностей его бизнес-процессов. Если вам нужен такой же модуль (или любой другой) - просто напишите мне.
Совместимость
Версия OpenCart2.3