А на сайте иметь инфоблок с брендами
AddEventHandler( "iblock", "OnAfterIBlockElementAdd", array( "nika_import", "FillTheBrands" ) ); AddEventHandler( "iblock", "OnAfterIBlockElementUpdate", array( "nika_import", "FillTheBrands" ) ); class nika_import { static function FillTheBrands( $arFields ){ $arCatalogID=array(59); //каталоги товаров $brandsCatalogId = 34;//ID инфоблока с произодителями (брендами) $codePropBrand1С = "CML2_MANUFACTURER"; //код свойства, в которое выгружает 1С $codePropBrand = 'BRAND'; //код свойства типа привязка к элементам инфоблока if(in_array($arFields['IBLOCK_ID'], $arCatalogID) ){ $arFilter = array('IBLOCK_ID' => $arFields['IBLOCK_ID'],'ID' => $arFields['ID']); $arSelect = array( 'ID', 'PROPERTY_'.$codePropBrand1С); $arItem = CIBlockElement::GetList( false, $arFilter, false, false, $arSelect)->fetch(); if($arItem['PROPERTY_'.$codePropBrand1С.'_VALUE']){ $arFilter = array( 'IBLOCK_ID' => $brandsCatalogId, 'NAME' => $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'] ); $arSelect = array("ID"); $arBrand = CIBlockElement::GetList( false, $arFilter,false,array("nPageSize"=>1),$arSelect)->fetch(); if( $arBrand ){ //cтавим найденный элемент-бренд CIBlockElement::SetPropertyValuesEx($arFields['ID'], false, array( $codePropBrand => $arBrand['ID'] )); } else{ //создаем новый бренд в инфоблоке и ставим его $el = new CIBlockElement; $arParams = array( "replace_space" => "-", "replace_other" => "-" ); $id = $el->Add( array( 'ACTIVE' => 'Y', 'NAME' => $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'], 'IBLOCK_ID' => $brandsCatalogId, 'CODE' => Cutil::translit( $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'], "ru", $arParams ) ) ); if( $id ){ CIBlockElement::SetPropertyValuesEx( $arFields['ID'], false, array( $codePropBrand => $id ) ); } else{ echo $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE']." ".Cutil::translit( $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'], "ru", $arParams )." "; echo $el->LAST_ERROR; } } } } } } |
Доработочка
У клиента не только инфобок с брендами, но и инфоблок с линиями продукции, в котором есть привязка к бренду
Бренд и линия выгружаются из 1С, надо было заполнять оба инфоблока
AddEventHandler( "iblock", "OnAfterIBlockElementAdd", array( "nika_import", "FillTheBrands" ) ); AddEventHandler( "iblock", "OnAfterIBlockElementUpdate", array( "nika_import", "FillTheBrands" ) ); class nika_import { static function FillTheBrands( $arFields ){ $arCatalogID=array(59); //каталоги товаров $brandsCatalogId = 34;//ID инфоблока с произодителями (брендами) $lineCatalogId = 38;//ID инфоблока с линиями $codePropBrand1С = "BREND"; //код свойства, в которое выгружает 1С $codePropBrand = 'BREND_'; //код свойства типа привязка к элементам инфоблока $codePropLine1С = "LINIYA"; //код свойства, в которое выгружает 1С $codePropLine = 'LINIYA_'; //код свойства типа привязка к элементам инфоблока $idBrand = false; $idLine = false; if(in_array($arFields['IBLOCK_ID'], $arCatalogID) ){ $el = new CIBlockElement; $arFilter = array('IBLOCK_ID' => $arFields['IBLOCK_ID'],'ID' => $arFields['ID']); $arSelect = array( 'ID', 'PROPERTY_'.$codePropBrand1С,'PROPERTY_'.$codePropLine1С); $arItem = CIBlockElement::GetList( false, $arFilter, false, false, $arSelect)->fetch(); if($arItem['PROPERTY_'.$codePropBrand1С.'_VALUE']){ $arFilter = array( 'IBLOCK_ID' => $brandsCatalogId, 'NAME' => $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'] ); $arSelect = array("ID"); $arBrand = CIBlockElement::GetList( false, $arFilter,false,array("nPageSize"=>1),$arSelect)->fetch(); if( $arBrand ){ $idBrand = $arBrand['ID']; } else{ //создаем новый бренд в инфоблоке и ставим его $arParams = array( "replace_space" => "-", "replace_other" => "-" ); $idBrand = $el->Add( array( 'ACTIVE' => 'Y', 'NAME' => $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'], 'IBLOCK_ID' => $brandsCatalogId, 'CODE' => Cutil::translit( $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'], "ru", $arParams ) ) ); } } if($arItem['PROPERTY_'.$codePropLine1С.'_VALUE']){ $arFilter = array( 'IBLOCK_ID' => $lineCatalogId, 'NAME' => $arItem['PROPERTY_'.$codePropLine1С.'_VALUE'] ); if($idBrand){ $arFilter["PROPERTY_242"] = $idBrand; } $arSelect = array("ID"); $arLine = CIBlockElement::GetList( false, $arFilter,false,array("nPageSize"=>1),$arSelect)->fetch(); if( $arLine ){ $idLine = $arLine['ID']; } else{ //создаем новый бренд в инфоблоке и ставим его $arParams = array( "replace_space" => "-", "replace_other" => "-" ); $idLine = $el->Add( array( 'ACTIVE' => 'Y', 'NAME' => $arItem['PROPERTY_'.$codePropLine1С.'_VALUE'], 'IBLOCK_ID' => $lineCatalogId, 'CODE' => Cutil::translit( $arItem['PROPERTY_'.$codePropLine1С.'_VALUE'], "ru", $arParams ), "PROPERTY_VALUES" => ($idBrand) ? [242 => $idBrand] : [] ) ); } } if( $idBrand || $idLine){ CIBlockElement::SetPropertyValuesEx( $arFields['ID'], false, array( $codePropBrand => $idBrand, $codePropLine => $idLine) ); } // else{ // echo $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE']." ".Cutil::translit( $arItem['PROPERTY_'.$codePropBrand1С.'_VALUE'], "ru", $arParams )." "; // echo $el->LAST_ERROR; // } } } } |