February 14, 2013

Битрикс. Выгрузка из 1С и отмена перезаписывания полей

Всем привет!

Наконец то дошли руки написать небольшой пост который возможно кому-то пригодится.

Итак, сразу к делу. Есть интернет-магазин работающий на Битрикс и синхронизирующийся в автоматическом режиме с 1С. Менеджерам заполняющим описания товаров намного удобнее заполнять описания через веб-интерфейс Битрикс т.к. там визуальный редактор и прочие блага цивилизации.

Но вот незадача, при очередной синхронизации с 1С описания товаров затираются описаниями оттуда (как правило пустыми). Для решения проблемы нужно исключить из выгрузки поля PREVIEW_TEXT и DETAIL_TEXT. Вот немного дописанное мной решение которое я обнаружил на просторах интернетов.

Добавляем это в init.php

<?php
//...

AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "DropPreviewText");
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "DropPreviewText");

function DropPreviewText($arFields)
{
    if (@$_REQUEST['mode']=='import') {
        unset($arFields['PREVIEW_TEXT']);
        unset($arFields['PREVIEW_TEXT_TYPE']);
        unset($arFields['DETAIL_TEXT']);
        unset($arFields['DETAIL_TEXT_TYPE']);
    }
}

Вкратце, в init.php мы перехватываем события OnBeforeIBlockElementUpdate и OnBeforeIBlockElementAdd и запускаем свою небольшую функцию удаляющую необходимые нам поля из массива с содержимым элемента из 1С. В моем случае это PREVIEW_TEXT и DETAIl_TEXT. Теперь при синхронизации эти поля не переписываются. Удачи! =)