Небольшое улучшение самому распространённому cпоcобу импорта товаров в Commerce — с помощью Feeds и Commere Feeds, позволяющее импортировать товары и их дисплеи за один запуск импортера:
1. Устанавливаем модули Feeds и Commerce Feeds.
2. Создаём импортер с именем products
.
3. В качестве фетчера выбираем File upload, в качестве процессора Commerce Product processor.
4. В маппинге полей добавляем как минимум — Product SKU (уникальный), Product title и Price: Amount:
5. Меняем остальные настройки по желанию.
6. Создаём импортер с именем product_displays
.
7. В качестве фетчера выбираем File upload, в качестве процессора Node processor.
8. В маппинге полей добавляем как минимум — GUID (уникальный, в качестве source можно использовать sku), Title и Product: SKU:
9. Меняем остальные настройки по желанию.
10. Пробуем импортировать товары, если всё хорошо, то двигаемся дальше.
11. Пробуем импортировать дисплеи, если всё хорошо, то двигаемся дальше.
12. Создаём модуль с кодом:
/**
* Implements hook_feeds_after_import().
*/
function MODULENAME_feeds_after_import(FeedsSource $source) {
if ($source->id == 'products') {
$fetcher_config = $source->getConfigFor($source->importer->fetcher);
$second_source = feeds_source('product_displays');
$second_source->setConfigFor($second_source->importer->fetcher, $fetcher_config);
$second_source->save();
$second_source->startImport();
}
}
Сбрасываем кэш.
Теперь после импорта товаров будет автоматически запускаться импорт дисплеев из того же файла.
Экспорт импортера products
Экспорт импортера product_displays
Пример файла csv
Видео с процессом импорта:
Способ подойдёт только при организации товаров по схеме 1 product = 1 product display.
- Пример модуля для импорта товаров в Drupal Commerce 2
- Модуль Node Export — экспорт/импорт материалов между сайтами
- Пример миграции контента из vBulletin 3 в Drupal 7: темы (топики)
- Пример миграции материалов из Drupal 5 в Drupal 7 с помощью модуля Migrate
- Модуль Feeds SQL — импорт данных из сторонней бд
Комментарии
Полезный материал. Вообще, слабо понимаю, зачем по умолчанию сделано разделение дисплея и товара. Как мне кажется, в основном люди используют 1 товар=1 дисплей.
Можно вопрос: в своей практике чем пользуешся (самописом или feeds):
1) При синхронизации сайта с прайсами поставщиков.
2) При начальном заполнении магазина товарами.
3) При переносе действующего магазина с другой платформы (с сохранением id товара и юрл).
Вобще, интересен подход при синхронизации с поставщиками: получил кучу xls от поставщиков (в разном формате), выдергнул некоторую информацию из сайта поставщиков, кое-что получил по почте . Как дальше все обрабатываешь? Парсишь и складываешь в один файл, а дальше натравливаешь feeds? Или еще как то?
тут 50/50. много магазинов где нужно выбрать вариант товара перед добавлением его в корзину. хотя согласен, что конкретная реализация в commerce чертовски неудобная
редко попадаются задачи на импорт, поэтому единого решения у меня нет. надёжно - migrate, быстро - feeds, парсинг с интернета - parser
С другой стороны если магазин торгует одеждой, частое явление когда нужно какой либо размер, или цвет скрывать или отключать от покупки в связи с его отсутствием на складе
Одежда - это классический случай использования атрибутов и классический пример от КомерцГайд, когда используется много товаров=1 дисплей.
Как бальзам на душу!!! Спасибо!
А может кто нибудь знает как уговорить Feeds пропускать строку импорта при определенном условии???
@Andriyun
Так и сделал, а так что бы это можно было через админку конфигурить?
Очень удивился когда не нашел как это сделать через Feed Tamper
А в чем разница между запусков фидс предложеным вами способом и
вариантом который предлагаю здесь https://www.drupal.org/node/749412
А кто знает как разрешить импортировать товары с одинаковым sku т.е артикулом товара
С одинаковым sku не получится добавить, а вот добавить с нужным sku можно.
Я немного быдлокода написал, чтобы заимпортировать товары со старой базы с нужными sku (в объекте $product надо передавать и id товара и признак import=true):
в commerce_product.controller.inc (public function save)
Из модуля вызываем commerce_product_save($product)
Сейчас будет немного глупый, возможно, вопрос...
А обновлять-то товары как? Он вот что пишет при каждой попытке:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10.0610003GRGL' for key 'sku'
utf8 кодировка?
А как очистить текстовое поле товара, если в импортируемом файле это поле пустое?
12. Создаём модуль с кодом:
/**
* Implements hook_feeds_after_import().
*/
function MODULENAME_feeds_after_import(FeedsSource $source) {
if ($source->id == 'products') {
$fetcher_config = $source->getConfigFor($source->importer->fetcher);
$second_source = feeds_source('product_displays');
$second_source->setConfigFor($second_source->importer->fetcher, $fetcher_config);
$second_source->startImport();
}
}
Если есть возможность опишите более детально этот процесс создания модуля.
А внятные решения для импорта 1 дисплей - несколько товаров есть?
Добрый день, вопрос может не по теме где еще его задать андеду я не знаю.
Почему бы Вам не сделать обзор модуля ImportKit? Очень интерестно было бы узнать Ваше мнение а в идеале было бы увдиеть небольшой гайд на эту тему ;)
После импорта выдает вот такую ошибку: http://gyazo.com/1f8f1c8360b355ba092ba8902b4c4d2b
Продукт создается а вот продукт дисплей - нет.
Аналогичная фигня после обновления друпала или фидса....
Подскажите как сделать так чтобы автоматически создавался sku или вообще его убрать, включен модуль Commerce AutoSKU, а загрузка едет по уникальному заголовку, но выдает ошибку что не может создать sku. Как сделать?
Установил Feeds и Commere Feeds.
На странице /admin/commerce/products/types/product/fields добавил новые поля для товара.
На странице /admin/structure/feeds/product_reference_importer/mapping в выпадающем меню Цель (target) нет новых полей, а только стондартные поля типа цена, артикул, тело...
Подскажите, пожалуйста, в чем может быть причина?
Эта ошибка описана на странице https://www.drupal.org/node/2542076
В моем случае, ошибка была исправлена установкой Commere Feeds 7.x-1.x-dev, вместо Commere Feeds 7.x-1.3.
Ребята нужна помощь, есть порядка 100тыс нод. Кое как загнал 30 тыс через feeds, теперь не могу продолжить дальше, на 1-3% импортирования кидает ошибку 504 gateway time out.
Это типо ресурсов не хватает? гружу по 5 тыс node.
Как быть? поделитесь опытом
Если год назад закачал модулем Feeds прайсы (из .csv), а теперь пришли новые цены (из-за курса доллара),
как теперь обновить цены?
Подскажите пожалуйста как заставить работать Feeds через Cron, т.е. импортировать из файла в определённое время автоматически, а не через интерфейс. Поисковики результатов не дали, а в коде копаться мозги сломаешь. За ранее спасибо.
Спасибо за метод!
До определенного времени исправно работало, но товаров стало больше и начала появляться ошибка:
A product with SKU 0303-10 could not be found. Please check that the product exists or import it first.
Так как импорт работает по крону (Так часто насколько возможно), то product_displays начинает стартовать еще до завершения products.
Как лучше сделать? Запускать по очереди в elysia_cron?
Настроил импорт товаров без дисплеев. Но после импорта удаляется цена. Подскажите, как решить проблему?
День добрый. Столкнулся с такой проблемой: при импорте не загружаются картинки с русскими буквами в названиях. Не подскажите, что делать? Названия картинок в БД самые дикие, например:
183203б_.jpg
183203в.jpg
183893а(1).jpg
183900б.jpg
183971б__(1).jpg
183971в__.jpg
188230б_(1).jpg
Поменял файл импорта на utf-8 и попробовал перед импортом распаковать архив с картинками и перекодировать в utf-8 названия картинок - см. полный код:
но где-то, закрался косяк и распаковка вообще перестала происходить (без 2 части кода, распаковка идет, но картинки с кирил. названиями не импортируются)
Что я сделал не так?
Добрый день, поставил модули, прописал модуль, очистил кэш. Запускаю импорт товаров, выполняется успешно, но второй импорт не запускает, в чем может быть проблема? В логах ошибок нет. ID импортеров совпадает.
Народ, сделал все, как описано. Создается и товар и дисплей, но они не связаны. Т.е. дисплей не привязан к товару. Как исправить?
Добавить комментарий