г. Санкт-Петербург
Войти
Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности
Заказать звонок
Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности
Логин
Пароль
Зарегистрироваться
После регистрации на сайте вам будет доступно отслеживание состояния заказов, личный кабинет и другие новые возможности

RSS
Пропись вручную бренда по xml-id при загрузке брендов товара из 1С, Штатная выгрузка зачастую сбоит с загрузкой брендов, следующий код находит бренды по xml_id и загружает 100% бренды в товары
 

При выгрузки из 1с у нас в свойство реквизиты поле бренд выгружается xml_id бренда данного товара.


После по данному xml_id мы получили id бренда и и скопировали его в свойство Бренд данного товара
код прописывается в файле init.php

Потребуется выставить в коде нужный IBLOCK_ID,

$arFilter = Array("IBLOCK_ID"=>5, "XML_ID"=>$BRAND_XMLID);

в нашем случае это 5

в коде также следует указать ID именно вашего xml_id - свойства в строке:

$arFields[PROPERTY_VALUES][24] - в нашем случае это 24

Код
//Функция при добавлении или изменении элемента выполняется код функции

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockEl");

AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockEl");

function OnAfterIBlockEl(&$arFields) {

if (CModule::IncludeModule("iblock")):
$res = CIBlockElement::GetByID($arFields['ID']);
if ($obRes = $res->GetNextElement()) {
$ar_res = $obRes->GetProperty("CML2_TRAITS");
foreach ($ar_res['DESCRIPTION'] as $key => $ar) {
$desc = trim($ar, " ");
if($desc == "Бренд"){
if ($_REQUEST['mode'] == 'import') {
$BRAND_XMLID = $ar_res['VALUE'][$key];

$arFields[PROPERTY_VALUES][67][n0][VALUE] = $BRAND_XMLID;

$arFilter = Array("IBLOCK_ID"=>10, "XML_ID"=>$BRAND_XMLID);
$arSelect = Array("ID");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if ($ob = $res->GetNextElement()){
$OBRAND = $ob->fields;
CIBlockElement::SetPropertyValuesEx (
$arFields['ID'],$arFields['IBLOCK_ID'],array (
'BRAND_REF' => $OBRAND[ID]
)
);
}
}
}
 
 
Аналогичным образом можно произвести установку артикула зная символьное ID его свойства

в Init.php

можно добавить обработку

OnAfterIBlockEl(&$arFields)

и получив данные реквизитов запустить case
для нужного свойства в моем случае св-во реквизита "Код"

поставлятеся для свойства с символьным ID "Minicod"

Код
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "OnAfterIBlockEl");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "OnAfterIBlockEl");
function OnAfterIBlockEl(&$arFields) {

    if (CModule::IncludeModule("iblock")):
        $res = CIBlockElement::GetByID($arFields['ID']);
        if ($obRes = $res->GetNextElement()) {
            $ar_res = $obRes->GetProperty("CML2_TRAITS");
            foreach ($ar_res['DESCRIPTION'] as $key => $ar) {
                $desc = trim($ar, " ");

      switch ($desc) {
      
       case "Код":
      //file_put_contents('/home/bitrix/www/log' . time() . '.log', print_r($ar, true));

                        if ($_REQUEST['mode'] == 'import') {
                            $setProperty = $ar_res['VALUE'][$key];
                            CIBlockElement::SetPropertyValuesEx (
                                $arFields['ID'],$arFields['IBLOCK_ID'],array (
                                    'MiniCod' => $setProperty
                                )
                            );
                        }      
      }
         
                
                
            }

        }
        //проверка, если setProperty не пустая то значение копируется в свойство CML2_BAR_CODE
    endif;

}

Для дебага удобно использовать раскомментируя строку:

//file_put_contents('/home/bitrix/www/log' . time() . '.log', print_r($ar, true));

получая в лог файл значение нужных массивов.
 
 
Если поиск нужно осуществлять по имени то подойдет такой код:
Код
case "VENDOR":
                        if ($_REQUEST['mode'] == 'import') {

         $VENDOR_NAME=$ar_res['VALUE'][$key];

      //         file_put_contents('/home/bitrix/www/log' . time() . '.log', print_r($VENDOR_NAME, true));
      
      $arFilter = Array("IBLOCK_ID"=>8(Тут ваш код инфоблока), "NAME"=>$VENDOR_NAME);
      $arSelect = Array("ID");
      $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);

      if ($ob = $res->GetNextElement()){
      $OBRAND = $ob->fields;
      file_put_contents('/home/bitrix/www/log' . time() . '.log', print_r($OBRAND, true));

      CIBlockElement::SetPropertyValuesEx (
         $arFields['ID'],$arFields['IBLOCK_ID'],array ('SYSTEM_BRAND' => $OBRAND[ID]));
      }

      //import         
      }
      break;