Импорт товаров из csv

вопрос о том как устроен импорт товаров

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 kromb
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 24.04.2010

24.04.2010 23:01

Доброго времени суток всем.
Столкнулись с такой проблемой, импортируем товары в Magento через профили. Товаров порядка 15 000. Импорт очень долгий. Но это не основная проблема. Если мы каждую неделю получаем новые прайсы и их нужно загружать, то при загрузке, если товар был в базе (от старого прайса), а в новом его нет, то он всё равно остаётся в базе. Т.е. получается, что старые товары не удаляются, если их уже нет в новом прайс-листе. Как вообще поступать в таких ситуациях, помогите советом или решением. Сейчас получается нужно сначала удалить все товары, а потом с нуля заново импортировать новый прайс. :)

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

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) Обновите количество товара на складе для каждой товарной позиции.

#3 kromb
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 24.04.2010

25.04.2010 20:26

Спасибо за подробный ответ!
Правильно ли я понимаю, что после сравнения двух файлов я должен сформировать файл вида:
SKU, Out Of Stock,
id_товара ,0 ?

> 4) Товары пункта 1.3 загрузите с актуальными значениями атрибутов
Magento заменит атрибуты товара, если я загружу два товара с одинаковым SKU?

#4 Art
  • Спамер
  • Группа: Заблокирован
  • Сообщений: 59
  • Регистрация: 11.08.2010

15.10.2010 14:28

Немного о DataFlow и скорости загрузки товаров в при помощи этого инструмента.

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

Лечится добавкой буквально двух строчек в исходный код.

Специалистам смотреть метод Mage_Catalog_Model_Product::afterCommitCallback();

#5 Art
  • Спамер
  • Группа: Заблокирован
  • Сообщений: 59
  • Регистрация: 11.08.2010

15.10.2010 17:51

Да, еще, вопрос знатокам, может кто уже сталкивался...

Я заметил, что при большом количестве товаров (десятки тысяч), импорт новых происходит гораздо быстрее, чем обновление уже имеющихся. В чем засада? Я подозреваю, что это связано с загрузкой каждого товара по отдельности прежде чем происходит обновление его атрибутов. Хотя, я могу и ошибаться... Может кто подскажет?

#6 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

18.02.2011 09:47

Просмотр сообщенияArt (15.10.2010 14:28) писал:

Немного о DataFlow и скорости загрузки товаров в при помощи этого инструмента.

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

Лечится добавкой буквально двух строчек в исходный код.

Специалистам смотреть метод Mage_Catalog_Model_Product::afterCommitCallback();

Может озвучите эти две строчки? Изменения нужно вносить в файл app\code\core\Mage\Catalog\Model\Product.php ?

#7 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

18.02.2011 14:18

Я рекомендую просто обновиться до Magento 1.5.0.1 — там скорость импорта и экспорта увеличена на 1-2 порядка (из нескольких источников слышал про 500 товаров в секунду).

Поделиться темой: