Отловить событие CSV импорта товаров

#
Отловить событие CSV импорта товаров
Здравствуйте! Можете привести пример как добавить для каждого товара дополнительные данные (получаемые по стороннему API) при импорте из CSV?
Используем событие Shop_Item_Import_Csv_Controller.onAfterImport?
Что-то подобное?


class Shop_Item_Import_Csv_Controller_Observer
{
    static public function onAfterImport($object, $args)
    {
      /* Получение данных по api, в том числе $text и $image*/
   
   
        $oShop_Item = $args[0];
        $oShop_Item->text = $text; // Дополнительные данные
   $oShop_Item->image_large = $image; // Дополнительные данные
        $oShop_Item->save();
    }
}

Core_Event::attach('Shop_Item_Import_Csv_Controller.onAfterImport', array('Shop_Item_Import_Csv_Controller_Observer', 'onAfterImport'));



И можно ли как-то обойти создание изображений с использованием Core_File::adminUpload и передачей параметров, а делать как в стандартном файле csv при импорте — просто ссылкой, чтобы система сама брала на себя загрузку?
Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
Модератор
#
Re: Отловить событие CSV импорта товаров
nikolajgromkov,
onAfterImport вызывается после завершение этапа импорта и принимает array($this->_oCurrentShop, $iCurrentSeekPosition), откуда вы там взяли  $oShop_Item в $args[0]?

После импорта основных данных, если был найден товар, то вызывается событие Shop_Item_Import_Csv_Controller.onBeforeAssociated, аргументами передаются array($this->_oCurrentShop, $this->_oCurrentItem, $aCsvLine)

nikolajgromkov писал(а):
И можно ли как-то обойти создание изображений с использованием Core_File::adminUpload и передачей параметров, а делать как в стандартном файле csv при импорте — просто ссылкой, чтобы система сама брала на себя загрузку?

Непонятно, что именно вы хотите обойти, при импорте из CSV и так можно указывать ссылку на изображение (внутренний путь на сайт или ссылка на внешний сайт) и такое изображение будет загружаться.
#
Re: Отловить событие CSV импорта товаров


hostcms писал(а):
Непонятно, что именно вы хотите обойти, при импорте из CSV и так можно указывать ссылку на изображение (внутренний путь на сайт или ссылка на внешний сайт) и такое изображение будет загружаться.


Тогда подробнее:
В CSV находятся основные поля — Артикул, Название, Группы, Цены. Импорт производится стандартно через систему управления CSV файлом. Необходимо в процессе импорта получать по API дополнительные данные по Артикулу для каждого товара, а именно: картинки, сертификаты, тексты. API отдаёт ссылки на картинки, поэтому и вопрос: можно ли не размещая в CSV файле ссылку на картинку (для 10 000 будет накладно вручную добавлять), эту ссылку полученную по API как-то передать в хук товару для создания изображения?

hostcms писал(а):
После импорта основных данных, если был найден товар, то вызывается событие Shop_Item_Import_Csv_Controller.onBeforeAssociated, аргументами передаются array($this->_oCurrentShop, $this->_oCurrentItem, $aCsvLine)


Подскажите, а где увидеть аргументы у события? Чтобы вопросы подобные не задавать. Я нашёл только список самих событий.
Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
Модератор
#
Re: Отловить событие CSV импорта товаров
nikolajgromkov писал(а):
эту ссылку полученную по API как-то передать в хук товару для создания изображения?

мысль неверна, нельзя ее передать в хук, вы в хуке (выше дал вам пример нужного хука) запрашиваете данные по API (имейте ввиду, http-запрос вещь долгая, может и секунду занять, а может и больше в зависимости от расположения сервера, к которому вы обращаетесь и скорости его ответа). Получив ответ от сервера вам необходимо самостоятельно загрузить картинку к товару, примеры загрузки можно найти как на форуме, так и в коде CMS.

nikolajgromkov писал(а):
Подскажите, а где увидеть аргументы у события? Чтобы вопросы подобные не задавать. Я нашёл только список самих событий.

Система поставляется в открытом исходном коде, вы можете увидеть какие аргументы передаются интересующему вас событию в контроллере Shop_Item_Import_Csv_Controller
#
Re: Отловить событие CSV импорта товаров
hostcms писал(а):
мысль неверна, нельзя ее передать в хук, вы в хуке (выше дал вам пример нужного хука) запрашиваете данные по API (имейте ввиду, http-запрос вещь долгая, может и секунду занять, а может и больше в зависимости от расположения сервера, к которому вы обращаетесь и скорости его ответа). Получив ответ от сервера вам необходимо самостоятельно загрузить картинку к товару, примеры загрузки можно найти как на форуме, так и в коде CMS.


Как бы вы рекомендовали решить эту проблему? Скриптом изначально создать csv файл со ссылками картинок, объединить с изначальным csv-файлом и загрузить уже в CMS без костылей этих?
Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
Модератор
#
Re: Отловить событие CSV импорта товаров
nikolajgromkov,
ваш вариант решения с запросом через API вполне имеет право на существование, почему вы не хотите им воспользоваться?
#
Re: Отловить событие CSV импорта товаров
hostcms писал(а):
ваш вариант решения с запросом через API вполне имеет право на существование, почему вы не хотите им воспользоваться?

Здравствуйте, решение реализовано, всё прекрасно работает. Пока не заметил особого замедления работы импорта даже при куче сторонних запросов по API + калькуляции разных параметров. Спасибо вам за такой универсальный продукт и за помощь!

Сейчас хотел чуть доработать импорт и получить значение свойства импортируемого из CSV. При событии Shop_Item_Import_Csv_Controller.onBeforeAssociated у товара еще нет свойств, насколько я понял. Нашёл только Shop_Item_Import_Csv_Controller.onBeforeImportItemPropertу, но из названия ясно что это ДО импорта свойств. Какое можно использовать событие, чтобы в нём уже были свойства товара?
Ускорение сайтов / Любые работы по сайту / Обращайтесь в nivaks-studio.ru
Модератор
#
Re: Отловить событие CSV импорта товаров
nikolajgromkov,
После импорта товара добавлено событие
Core_Event::notify('Shop_Item_Import_Csv_Controller.onAfterImportItem', $this, array($this->_oCurrentShop, $this->_oCurrentItem, $aCsvLine));
запросить Shop_Item_Import_Csv_Controller вы можете в поддержке.
Авторизация