Доброго времени суток всем.
Столкнулись с такой проблемой, импортируем товары в Magento через профили. Товаров порядка 15 000. Импорт очень долгий. Но это не основная проблема. Если мы каждую неделю получаем новые прайсы и их нужно загружать, то при загрузке, если товар был в базе (от старого прайса), а в новом его нет, то он всё равно остаётся в базе. Т.е. получается, что старые товары не удаляются, если их уже нет в новом прайс-листе. Как вообще поступать в таких ситуациях, помогите советом или решением. Сейчас получается нужно сначала удалить все товары, а потом с нуля заново импортировать новый прайс.
Импорт товаров из csv
вопрос о том как устроен импорт товаров
25.04.2010 10:36
Magento DataFlow намеренно спроектирован сохранять товары, отсутствующие в новом прайс-листе.
Таким образом разработчики приучают администраторов магазинов не перезаписывать весь товарный каталог, а вместо этого предлагают подумать над импортом только изменившейся информации.
Т.к. Magento предназначена для магазинов больших или с перспективой стать большими, то чем раньше администратор научится экономному импорту - тем лучше.
В простом случае алгоритм следующий:
1) Напишите скрипт, который будет сравнивать 2 ваших прайс-листа и выдавать их разницу:
1.1) список товаров, присутствующих в первом, но отсутствующих во втором
1.2) список товаров, присутствующих есть во втором, но отсутствует в первом
1.3) список товаров, присутствующих в обоих, но атрибуты которых в первом и втором не совпадают
Такой скрипт никак не связан с Magento: он работает с файлами, принятыми у ваших поставшиков для обмена данными: Excel, CSV, XML и т.п.
2) У товаров пункта 1.1 поставьте флаг Out Of Stock (для массовой простановке этого флага можно загрузить через DataFlow файл с двумя колонками: идентификатор товара и флаг Out Of Stock).
3) Товары пункта 1.2 загрузите целиком (на практике их вряд ли больше 1-5% от общего числа товаров)
4) Товары пункта 1.3 загрузите с актуальными значениями атрибутов
5) Обновите количество товара на складе для каждой товарной позиции.
Таким образом разработчики приучают администраторов магазинов не перезаписывать весь товарный каталог, а вместо этого предлагают подумать над импортом только изменившейся информации.
Т.к. Magento предназначена для магазинов больших или с перспективой стать большими, то чем раньше администратор научится экономному импорту - тем лучше.
В простом случае алгоритм следующий:
1) Напишите скрипт, который будет сравнивать 2 ваших прайс-листа и выдавать их разницу:
1.1) список товаров, присутствующих в первом, но отсутствующих во втором
1.2) список товаров, присутствующих есть во втором, но отсутствует в первом
1.3) список товаров, присутствующих в обоих, но атрибуты которых в первом и втором не совпадают
Такой скрипт никак не связан с Magento: он работает с файлами, принятыми у ваших поставшиков для обмена данными: Excel, CSV, XML и т.п.
2) У товаров пункта 1.1 поставьте флаг Out Of Stock (для массовой простановке этого флага можно загрузить через DataFlow файл с двумя колонками: идентификатор товара и флаг Out Of Stock).
3) Товары пункта 1.2 загрузите целиком (на практике их вряд ли больше 1-5% от общего числа товаров)
4) Товары пункта 1.3 загрузите с актуальными значениями атрибутов
5) Обновите количество товара на складе для каждой товарной позиции.
25.04.2010 20:26
Спасибо за подробный ответ!
Правильно ли я понимаю, что после сравнения двух файлов я должен сформировать файл вида:
SKU, Out Of Stock,
id_товара ,0 ?
> 4) Товары пункта 1.3 загрузите с актуальными значениями атрибутов
Magento заменит атрибуты товара, если я загружу два товара с одинаковым SKU?
Правильно ли я понимаю, что после сравнения двух файлов я должен сформировать файл вида:
SKU, Out Of Stock,
id_товара ,0 ?
> 4) Товары пункта 1.3 загрузите с актуальными значениями атрибутов
Magento заменит атрибуты товара, если я загружу два товара с одинаковым SKU?
15.10.2010 14:28
Немного о DataFlow и скорости загрузки товаров в при помощи этого инструмента.
После наблюдений, дебага выяснилось следующее:
Переиндексация происходит дважды, сначала обновляется индекс каждого загружаемого товара, потом переиндексация всех товаров магазина.
Второе - не так страшно, а вот обновлять индекс каждого загруженного товара, в процессе загрузки - жуткое расточительство, при этом скорость загрузки падает по экспоненте.
Лечится добавкой буквально двух строчек в исходный код.
Специалистам смотреть метод Mage_Catalog_Model_Product::afterCommitCallback();
После наблюдений, дебага выяснилось следующее:
Переиндексация происходит дважды, сначала обновляется индекс каждого загружаемого товара, потом переиндексация всех товаров магазина.
Второе - не так страшно, а вот обновлять индекс каждого загруженного товара, в процессе загрузки - жуткое расточительство, при этом скорость загрузки падает по экспоненте.
Лечится добавкой буквально двух строчек в исходный код.
Специалистам смотреть метод Mage_Catalog_Model_Product::afterCommitCallback();
15.10.2010 17:51
Да, еще, вопрос знатокам, может кто уже сталкивался...
Я заметил, что при большом количестве товаров (десятки тысяч), импорт новых происходит гораздо быстрее, чем обновление уже имеющихся. В чем засада? Я подозреваю, что это связано с загрузкой каждого товара по отдельности прежде чем происходит обновление его атрибутов. Хотя, я могу и ошибаться... Может кто подскажет?
Я заметил, что при большом количестве товаров (десятки тысяч), импорт новых происходит гораздо быстрее, чем обновление уже имеющихся. В чем засада? Я подозреваю, что это связано с загрузкой каждого товара по отдельности прежде чем происходит обновление его атрибутов. Хотя, я могу и ошибаться... Может кто подскажет?
18.02.2011 09:47
Немного о DataFlow и скорости загрузки товаров в при помощи этого инструмента.
После наблюдений, дебага выяснилось следующее:
Переиндексация происходит дважды, сначала обновляется индекс каждого загружаемого товара, потом переиндексация всех товаров магазина.
Второе - не так страшно, а вот обновлять индекс каждого загруженного товара, в процессе загрузки - жуткое расточительство, при этом скорость загрузки падает по экспоненте.
Лечится добавкой буквально двух строчек в исходный код.
Специалистам смотреть метод Mage_Catalog_Model_Product::afterCommitCallback();
После наблюдений, дебага выяснилось следующее:
Переиндексация происходит дважды, сначала обновляется индекс каждого загружаемого товара, потом переиндексация всех товаров магазина.
Второе - не так страшно, а вот обновлять индекс каждого загруженного товара, в процессе загрузки - жуткое расточительство, при этом скорость загрузки падает по экспоненте.
Лечится добавкой буквально двух строчек в исходный код.
Специалистам смотреть метод Mage_Catalog_Model_Product::afterCommitCallback();
Может озвучите эти две строчки? Изменения нужно вносить в файл app\code\core\Mage\Catalog\Model\Product.php ?
18.02.2011 14:18
Я рекомендую просто обновиться до Magento 1.5.0.1 — там скорость импорта и экспорта увеличена на 1-2 порядка (из нескольких источников слышал про 500 товаров в секунду).