Часто бывает, когда хочется заполнять в 1С производителя в стандартном поле производитель
А на сайте иметь инфоблок с брендами
Доработочка
У клиента не только инфобок с брендами, но и инфоблок с линиями продукции, в котором есть привязка к бренду
Бренд и линия выгружаются из 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 инфоблока с произодителями (брендами)
$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;
// }
}
}
} |