Задача: в 1С есть каталог товаров который нужно выгрузить на сайт, но разделы которые находятся на сайте не совпадают с теми, которые в базе 1С. Новые товары могут находиться в группах выгруженных из 1С, а вот те что уже есть на сайте должны обновиться, при чем наименование не должно обновляться.
Решение
Нужно отредактировать файл /bitrix/php_interface/init.php.
Добавим два обработчика событий. Первый будут блокировать наименование при добавлении и обновлении элемента инфоблока, а третий сохранять существующий товар в текущей группе.
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "DropNAME");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "DropNAME");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate","SaveInOldSection");
function DropNAME($arFields)
{
if (@$_REQUEST['mode']=='import') {
unset($arFields['NAME']);
}
}
function SaveInOldSection(&$arFields)
{
if (@$_REQUEST['mode']=='import') {
$db_old_groups = CIBlockElement::GetElementGroups($arFields['ID'], true);
while($ar_group = $db_old_groups->Fetch()) {
if(!in_array($ar_group['ID'],$arFields['IBLOCK_SECTION'])) {
$arFields['IBLOCK_SECTION'][]=$ar_group['ID'];
}
}
}
}
Таким образом группы и наименования у товаров затираться при обмене не будут, а нужные свойства и остатки на складе будут обновляться.