Sunday, July 8, 2012

Импорт товаров в Preastashop

Недавно делал интернет-магазин автозапчастей на Prestashop. Специфика магазина такая, что товаров в нем десятки, а в перспективе и сотни, тысяч. При этом прайсы могут часто обновляться и их нужно каким-то образом импортировать в магазин.

Оказалось, что стандартный импортер Prestashop для такого количества товаров совершенно не подходит. На моем скромном ноутбуке импорт пары тысяч товаров занял около часа.

Тогда я начал писать свой импортер. Идея заключалась в том, чтобы минимизировать количество запросов к базе данных из PHP. Все данные загружаются во временную таблицу, а потом специально созданная хранимая процедура не очень сложными запросами заливает данные в таблицы Prestashop или обновляет цены и количество для товаров, которые в базе уже есть.

Заполнение временной таблицы делается INSERT-ом сразу 100 или 200 товаров в одном запросе.Связывание импортной таблицы и таблицы products выполняется по полю reference (Артикул), которое я сделал индексируемым.

В итоге прайс с 10 тысячами товаров стал заливаться чуть больше минуты на моем компьютере и за 30 секунд у хостера! Это, что называется, почувствуйте разницу.

Хранимые процедуры поддерживаются только в MySQL 5, но, я думаю, хостеры уже давно все перешли на нее. А выигрыш от такой схемы импорта очень большой.

Импорт выполняется не из CSV, а из файлов Excel, чтобы не делать лишней работы по конвертации. Для этого хорошо подошла библиотека PHP Excel Reader. Я пробовал сначала более мощную PHPExcel, но она оказалась более требовательной к памяти и в моем случае не помогали даже ее механизмы кеширования, большие прайсы в 2 МБ на хостинге импортировать не удавалось из-за ограничения по памяти, заданного хостером.

Прайсы заливаются в архиве и распаковываются на сервере. Для работы с архивами у Prestashop уже есть готовые классы.

Если вы пользуетесь Prestashop и вам нужно много и часто импортировать товары, есть смысл написать свой импортер вместо встроенного. Много времени это не займет, а выигрыш очевиден.

2 comments:

Сергей Симон said...

Добрый день!
Меня очень интересует это импортер для большого количества товаров. Можно его как-то заполучить? Он мне жизненно необходим! Я ставлю товарищу магазин на престе тоже по авто запчастям... 120000 товаров. Импорт родной всасывает от 30000 до 100000 строк но тратит на это 5-8 часов но с задачей полностью не справляется, а потом еще когда делаешь индексацию для поиска вообще все вешается.... поделитесь пожалуйста Вашей наработкой по импорту в престашоп. Я в программировании не силен, иначе не морочил бы Вам голову.Заранее огромное спасибо!

Dmitry I Yastrebkov said...

Я его продолжаю дорабатывать, есть проблемы для товаров, у которых есть ошибки в исходных прайсах или спецсимволы. Прямо сейчас делиться не готов, если будете ждать, то напишите через неделю-две.