Услуги профессионального Битрикс-программиста

Производителей (бренды) в отдельный инфоблок


Часто бывает, когда хочется заполнять в 1С производителя в стандартном поле производитель
А на сайте иметь инфоблок с брендами
AddEventHandler( "iblock", "OnAfterIBlockElementAdd", array( "nika_import", "FillTheBrands" ) );
AddEventHandler( "iblock", "OnAfterIBlockElementUpdate", array( "nika_import", "FillTheBrands" ) );
class nika_import {
    function FillTheBrands( $arFields ){
        $arCatalogID=array(10); //каталоги товаров
        $brandsCatalogId = 35;//ID инфоблока с произодителями (брендами)
        //обычно 1С выгружает в свойство с кодом 'CML2_MANUFACTURER', если настроено заменить 'CML2_MANUFACTURER' на свой код свойства
        $codePropBrand = 'BRAND'; //код свойства типа привязка к элементам инфоблока
        if(in_array($arFields['IBLOCK_ID'], $arCatalogID) ){
           $arFilter = array('IBLOCK_ID' => $arFields['IBLOCK_ID'],'ID' => $arFields['ID']);
           $arSelect = array( 'ID', 'PROPERTY_CML2_MANUFACTURER');
            $arItem = CIBlockElement::GetList( false, $arFilter, false, false, $arSelect)->fetch();
            if($arItem['PROPERTY_CML2_MANUFACTURER_VALUE']){
               $arFilter = array( 'IBLOCK_ID' =>  $brandsCatalogId, 'NAME' => $arItem['PROPERTY_CML2_MANUFACTURER_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_CML2_MANUFACTURER_VALUE'],
                        'IBLOCK_ID' =>  $brandsCatalogId,
                        'CODE' => Cutil::translit( $arItem['PROPERTY_CML2_MANUFACTURER_VALUE'], "ru", $arParams )
                    ) );                
                    if( $id ){
                        CIBlockElement::SetPropertyValuesEx( $arFields['ID'], false, array( $codePropBrand => $id ) );
                    }
                    else{
                        echo $arItem['PROPERTY_CML2_MANUFACTURER_VALUE']." ".Cutil::translit( $arItem['PROPERTY_CML2_MANUFACTURER_VALUE'], "ru", $arParams )." ";                   
                        echo $el->LAST_ERROR;
                    }
                }
            }
        }
    }
}