Сергей Эсауленко

Преобразователь свойства CML2_TRAITS (из 1С) в 1С-Битрикс

Обработчик выполняет небольшую, но очень важную функцию - он преобразует характеристики из множественного свойства типа CML2_TRAITS (где указано обычно много различных характеристик в режиме «характеристика-значение») в отдельные обычные свойства, причем делает это с минимальной усилием. Достаточно в переменно $traitsDescription указать по какому полю необходимо вытащить информацию, и указанный xml_id код прописываем в нужном свойстве. В нашем случай свойство было тип "справочник", поэтому дополнительных преобразований нам не требовались. На выходе из 1Ски мы заранее знаем xml_id и просто указываем его в свойстве товара.

Если потребуется присваивать значение просто из "Списка", то скорей всего нужно будет добавлять проверку. Получить из внешнего кода реальный ID значения, и присвоить его к списку. 


 
/** для кастомизации логики из 1Ски **/
$eventManager->addEventHandler('iblock', 'OnAfterIBlockElementAdd', 'eventOnUpdate');
$eventManager->addEventHandler('iblock', 'OnAfterIBlockElementUpdate', 'eventOnUpdate');
function eventOnUpdate($fields)
{
    $requestParams = \Bitrix\Main\Context::getCurrent()->getRequest()->toArray();
    //получаем свойства
    $props = [];
    \CIBlockElement::GetPropertyValuesArray($props, $fields['IBLOCK_ID'], ['ID' => $fields['ID']], ['CODE' => ['CML2_TRAITS', 'AKTSIYA', 'NOVINKA', 'SOVETUEM', 'KHIT', 'HIT']]);

    if ($requestParams['type'] == 'catalog' && $requestParams['mode'] == 'import') {
        //ставим пометку о доступности товара на главную страницу
        \CIBlockElement::SetPropertyValueCode($fields['ID'], 'SHOW_ON_INDEX_PAGE', [["VALUE" => 381]]);

        //проставляем из реквизитов данные
        if(!empty($props[$fields['ID']]['CML2_TRAITS']['VALUE'])){
            //выдергиваем информацию
            foreach ($props[$fields['ID']]['CML2_TRAITS']['DESCRIPTION'] as $keyDescription=>$traitsDescription){
                //разделяем на массив полученную информацию
                $traitsValue = explode(',', $props[$fields['ID']]['CML2_TRAITS']['VALUE'][$keyDescription]);
                if($traitsDescription === 'Сегменты номенклатуры'){
                    \CIBlockElement::SetPropertyValuesEx($fields['ID'], $fields['IBLOCK_ID'], ['SEGMENTS_NOMENCLATURE' => $traitsValue]);
                }
                if($traitsDescription === 'Ценовая группа'){
                    \CIBlockElement::SetPropertyValuesEx($fields['ID'], $fields['IBLOCK_ID'], ['PRICE_GROUP' => $traitsValue]);
                }
            }
        }
    }
}

06.07.2021
1C-Битрикс или Wordpress: какую CMS выбрать для лучшей работы сайта?