Я работаю прораммистом на Битрикс. У меня стояла задача выгрузка товара с кратким описанием на сайт, но так как разработчиками из коробки реализовано так что в поле Анонс на сайте заносится полное наименование товара по причине того что в 1С по умолчанию нет поля краткое описание, пришлось справляться своими силами. Для тех у кого стоит такая же задача, я решил поделится своим опытом.
Со стороны 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"] (анонс). На этом все.
Надеюсь моя статья поможет сократить время тем у кого стоит такая же задача.