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

Преобразователь свойства 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 выбрать для лучшей работы сайта?