====== Импорт товаров из CSV-файла с идентификацией по артикулу и производителю ======
При импорте товаров из CSV-файла учитывается только артикул товара, и несколько товаров с одинаковым артикулом будут импортированы, как один товар. Артикул может совпадать у товар разных производителей, а у одного производителя все артикулы обычно уникальны, поэтому можно внести модификации в импорт для того, чтобы в идентификации товара участвовал не только артикул, но и производитель товара.
Для реализации такого подхода можно воспользоваться нижеприведенным решением, оно позволяет импортировать товары с одинаковым артикулом и разными производителями, при этом в импортируемом CSV-файле //первым должен быть столбец с производителем, а вторым столбец с артикулом//.
Устанановка решения:
- Создать файл наблюдателя:set('shop_item_with_prod', clone $args[1]);
}
static public function onAfterFindByMarking($object, $args)
{
// Новый товар
$oItemWithProd = Core_Registry::instance()->get('shop_item_with_prod');
// Результат поиска по артикулу
$oItemWithMarking = $args[1];
$oShop_Item = Core_Entity::factory('shop_item');
$oShop_Item->queryBuilder()
->where('marking', '=', $oItemWithMarking->marking)
->where('shop_producer_id', '=', $oItemWithProd->shop_producer_id)
->limit(1)
;
$aoShop_Item = $oShop_Item->findAll();
if (count($aoShop_Item) > 0)
{
$object->setCurrentItem($aoShop_Item[0]);
}
else
{
$oItemWithProd->marking = $oItemWithMarking->marking;
$object->setCurrentItem($oItemWithProd);
}
}
}
- Зарегистрировать в файле ''bootstrap.php'' следующие события:// Поиск по артикулу и производителю при импорте CSV-файла
Core_Event::attach('Shop_Item_Import_Csv_Controller.onBeforeFindByMarking', array('Shop_Item_Import_Observer_SearchByProdAndVendor', 'onBeforeFindByMarking'));
Core_Event::attach('Shop_Item_Import_Csv_Controller.onAfterFindByMarking', array('Shop_Item_Import_Observer_SearchByProdAndVendor', 'onAfterFindByMarking'));
Страницу создал Максим Засорин 18.10.16 в 10:22