Как реализовать заполнением поле Анонс коротким описанием из 1С на сайте Битрикс

Я работаю прораммистом на Битрикс. У меня стояла задача выгрузка товара с кратким описанием на сайт, но так как разработчиками из коробки реализовано так что в поле Анонс на сайте заносится полное наименование товара по причине того что в 1С по умолчанию нет поля краткое описание, пришлось справляться своими силами. Для тех у кого стоит такая же задача, я решил поделится своим опытом. 

  1. Для начала совместно программистом 1С мы создали текстовое поле краткое описание в 1С
  2. В настройках обмена с сайтом это поле я добавил в дополнительные реквизиты, для того что бы на сайт оно загружалось как свойство.

Со стороны 1С работа закончена , дальше нам предстоит выгрузить каталог на сайт Битрикс и написать скрипт в обработчике init.php, который будет копировать данное свойство инфоблока уже в поле анонс.

Открываем init.php который находится по пути \bitrix\php_interface\init.php  (изначально такого фала нет , если он отсутствует по данному пути, то его необходимо создать) и вставляем код ниже

// функция при обновлении товара из 1с, копирует свойство "CML2_TRAITS" в поле анонс элемента
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "DoNotUpdate");
function DoNotUpdate(&$arFields)
{
    if (CModule::IncludeModule("iblock")):
        $res = CIBlockElement::GetByID($arFields['ID']);
        if ($obRes = $res->GetNextElement()) {
            $ar_res = $obRes->GetProperty("CML2_TRAITS");
            $setProperty = $ar_res['VALUE']['6'];
        }
    endif;
    if ($_REQUEST['mode'] == 'import') {


        $arFields["PREVIEW_TEXT"] = $setProperty;
    }

}

// функция при добавлении товара из 1с, копирует свойство "CML2_TRAITS" в поле анонс элемента
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "DoNotAdd");
function DoNotAdd(&$arFields)
{
    if (CModule::IncludeModule("iblock")):
        $res = CIBlockElement::GetByID($arFields['ID']);
        if ($obRes = $res->GetNextElement()) {
            $ar_res = $obRes->GetProperty("CML2_TRAITS");
            $setProperty = $ar_res['VALUE']['6'];
        }
    endif;
    if ($_REQUEST['mode'] == 'import') {

        $arFields["PREVIEW_TEXT"] = $setProperty;
    }
}

В данном скрипте мы при изменении или добавление нового товара из 1с  за что отвечают события  OnBeforeIBlockElementAdd   и OnBeforeIBlockElementUpdate  (советую вам про них почитать в официальной документации)

мы с помощью класса CIBlockElement  в каждом элементе находим нужное нам свойство (в моем случае это множественное свойство CML2_TRAITS типа строка, в котором с ключем ['6'] содержится мое краткое описание из 1С) и заносим его в переменную  $setProperty. После этого мы просто сохранем его в нужное поле, в конкретном случае в поле $arFields["PREVIEW_TEXT"] (анонс). На этом все.

Надеюсь моя статья поможет сократить время тем у кого стоит такая же задача.


Загрузка комментариев...