====== Импорт товаров из 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