[Решено] Импорт товаров в Drupal Commerce

Главные вкладки

Аватар пользователя Sun-fire Sun-fire 21 сентября 2010 в 16:09

Суть трабла. Необходимо организовать импорт товаров в Drupal Commerce.

Как это сделать в Ubercart под D6 мне ясно. Node import с допиливанием под кастомные филды, или свой модуль в котором парсим csv и дергаем node_save. Но в Drupal Commerce ситуация немного поменялась. Тут товар представлен не нодой, а отдельной сущностью product. Следовательно, вышеуказанный алгоритм не подходит.

Как в такой ситуации поступать? Писать напрямую в базу, делая все соответствующие проверки? Или есть специфическая функция Drupal Commerce, аналогичная node_save?

Комментарии

Аватар пользователя Sun-fire Sun-fire 22 сентября 2010 в 18:18

Решение найдено. Работать с сущностью product в Drupal Commerce можно через Entity API.
Доступ к продуктам можно получать с помощью методов:

  • commerce_product_load()
  • commerce_product_load_by_sku()
  • commerce_product_create()
  • commerce_product_save()
Аватар пользователя Sun-fire Sun-fire 1 августа 2011 в 14:42

Например затем, что в некоторых ситуациях нужна не универсальность, а быстрота. Например, если нужно каждых 1о минут обновлять актуальность (цены, наличие по складам и т.п.) 10К товаров, причем в полностью автоматизированном режиме, без участия человека. В таком случае узко заточенное решение работает более эффективно.

Аватар пользователя cosmos cosmos 9 августа 2011 в 20:43

такую скорость нереально достич я считаю на друпале
уж больно медленно ноды удаляются и апдейтятся
тут товар вобще в нодах тогда не стоит хранить

Аватар пользователя Sun-fire Sun-fire 10 августа 2011 в 0:39

"cosmos" wrote:

такую скорость нереально достич я считаю на друпале

Как-бы такое решение уже успешно работает в течении месяца на продакшн-сайте с количеством номенклатур около 5К. Причем количество элементов контента на синхронизацию постоянно растет по мере появления и выгрузки на сайт новых товаров из ERP 1С. Работоспособность в штатном режиме прогнозируется до 10К номенклатур. Зазор по времени исполнения по крайней мере это позволяет. Точное количество товаров смогу сказать только утром, поскольку доступа к админке/базе сейчас не имею.

Аватар пользователя cosmos cosmos 10 августа 2011 в 0:47

я имел ввиду решение обновления прайсов с помощью модуля feeds
потестю загрузку 5K нод отпишу скока по времени занимает

Аватар пользователя Sun-fire Sun-fire 10 августа 2011 в 12:07

Уточню данные. На данный момент на сайте 7121 номенклатура. Полное обновление цен/наличия занимает в среднем сейчас 2.5 минуты. Запуск обновления раз в 10 минут. Используется смешанный доступ к данным (в зависимости от операции используется Commerce АРІ, в некоторых случаях прямой доступ к базе через Database API).

Аватар пользователя cosmos cosmos 15 августа 2011 в 0:13

Drupal 7 + Ubercart 3

Импорт прайсов - с помощью модулей
feeds
uc_feeds - для импорта наличия на складе (stock) хотя все равно пришлось допиливать
feeds_tamper

Категории товаров - таксономия

Решил делать на U3 тк в drupal commerce убивает дублирование
нод продуктов и сущностей товаров
и необходимость их привязки

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 15 августа 2011 в 11:59

"cosmos" wrote:
Решил делать на U3 тк в drupal commerce убивает дублирование

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

Аватар пользователя Sun-fire Sun-fire 15 августа 2011 в 12:15

Дублирования там нет Smile В коммерце сущность товар представляет собой собственно товар, с его стоимостью, кодом товара и т. д. А нода уже является средством визуального представления товара на сайте. Это очень удобно.

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

Но есть большое но. Если нужна возможность сделать мульти-сабмит, например сразу за одно нажатие кнопки "Добавить в корзину" добавить туда три футболки размера S и две L, то придется писать кастомное решение, поскольку коммерц умеет добавлять только один товар за одно нажатие кнопки add to cart. Для этого уже нужно знание "внутренностей" коммерца, причем не только на уровне АРІ, но и на уровне базы данных. Поскольку в отдельных случаях АРІ не позволяет решить задачу, и приходится писать "костыли", которые работают с базой данных мимо АРІ.

В таких моментах и заключается то использование напильника, о котором я говорил в одном из своих постов.

Аватар пользователя Dr.Osd Dr.Osd 22 мая 2013 в 20:47

Хороший комментарий, спасибо. Только смотрю - два года ему.
Может ситуация на сегодня как-то изменилась? Неужели по прежнему комерц не умеет делать мульти-сабмит?

И еще: я тут замучался пользоваться импортом через feeds. Все работает в принципе (товары с вариантами цветов, размеров и мультикатегорий), но все это делается через два файла и гланое, глючат title. Когда импортируешь варианты, то в списке вариантов title есть а при редактировании варианта title пустой. То-же и с дисплеем, только наоборот: после импорта в списке заголовка нет а в режиме редактирования дисплея есть.
Возможно Вы знаете решение этой проблемы либо можете продать удобное решение для импорта?

Аватар пользователя cosmos cosmos 16 августа 2011 в 13:09

как нет дублирования...
если у меня в каталоге 5000 товаров то
будет и таблица сущностей в 5000 строк и табл нод такая же
и еще
есть ли стандартный вариант прикрепления сущности товара к ноде при импорте (я не нашел)
удаление сущности товара при удалении связанной с ней её ноды?

А ваш пример с футболками решается через атрибуты товара, делать модель из футболки и прикреплять к ней товары некашерно (имхо)
футболка это продукт и храниться должен в 1 месте.

Аватар пользователя Sun-fire Sun-fire 16 августа 2011 в 14:42

На вкус и цвет все фломастеры разные. Кому-то ближе архитектура уберкарта, кому то больше нравится коммерц. Две кардинально разные архитектуры, и у каждой есть свои преимущества и недостатки. Каждый разработчик имеет свое ИМХО - использовать коммерц или нет.

В базе данных безусловно, некоторое дублирование на уровне полей есть. Товар это одна сущность, нода представления товара - это совсем другая сущность. Здесь даже по сути не дублирование, а распределенное хранение данных.

По сути вопроса:

Для автоматического создания нод - модуль Commerce Bulk Product Creation. Как он работает не скажу, поскольку использую свое решение для импорта/обновления данных.
Для удаления - не знаю, причина та-же - есть свое кастомное решение.

Аватар пользователя Sun-fire Sun-fire 22 мая 2013 в 22:32

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