Добрый день!
Очень странный баг поймал - нужно при удалении элемента из определенного инфоблока копировать элемент в другой инфоблок(аналог корзины в винде)
В консоли код(который внутри условия $iblockId == 66) работает, а внутри хэндлера почему-то копирует без свойств. Проверил на этапе вызова функции добавления
Код |
---|
$el->Add($arFieldsCopy) |
массив arFieldsCopy одинаковый, т.е. сама функция add ведет себя по разному в консоли и в хендлере. Пробовал после создания проапдейтить:
Код |
---|
$el ->Update($NEW_ID,$arFieldsCopy['PROPERTY_VALUES']); |
Но тот же результат. Не подскажите в чём может быть проблема?
код:
Код |
---|
class deleteElementHandler {
// создаем обработчик события "OnBeforeIBlockElementDelete"
function OnBeforeIBlockElementDeleteHandler($ID) {
if (CModule::IncludeModule("iblock")) {
$Res = CIBlockElement::GetByID($ID);
if ($arItem = $Res->GetNext()) {
$iblockId = $arItem['IBLOCK_ID'];
}
}
if ($iblockId == 66) {
$resource = CIBlockElement::GetByID($ID);
if ($ob = $resource->GetNextElement()) {
$arFields = $ob->GetFields();
$arFields['PROPERTIES'] = $ob->GetProperties();
$arFieldsCopy = $arFields;
unset(
$arFieldsCopy['ID'], $arFieldsCopy['TMP_ID'], $arFieldsCopy['WF_LAST_HISTORY_ID'], $arFieldsCopy['SHOW_COUNTER'], $arFieldsCopy['SHOW_COUNTER_START'], $arFieldsCopy['~ID'], $arFieldsCopy['~TMP_ID'], $arFieldsCopy['~WF_LAST_HISTORY_ID'], $arFieldsCopy['~SHOW_COUNTER'], $arFieldsCopy['~SHOW_COUNTER_START'], $arFieldsCopy['ACTIVE_FROM'], $arFieldsCopy['~ACTIVE_FROM'], $arFieldsCopy['ACTIVE_TO'], $arFieldsCopy['~ACTIVE_TO'], $arFieldsCopy['DATE_ACTIVE_FROM'], $arFieldsCopy['~DATE_ACTIVE_FROM'], $arFieldsCopy['DATE_ACTIVE_TO'], $arFieldsCopy['XML_ID'], $arFieldsCopy['~XML_ID'], $arFieldsCopy['EXTERNAL_ID'], $arFieldsCopy['~EXTERNAL_ID'], $arFieldsCopy['CODE'], $arFieldsCopy['~CODE'], $arFieldsCopy['IBLOCK_SECTION_ID'], $arFieldsCopy['~IBLOCK_SECTION_ID']
);
foreach ($arFieldsCopy as $code => $field) {
if (!$field) {
unset($arFieldsCopy[$code]);
}
}
$arFieldsCopy['IBLOCK_ID'] = 59;
$arFieldsCopy['~IBLOCK_ID'] = 59;
$arFieldsCopy['PROPERTY_VALUES'] = array();
foreach ($arFields['PROPERTIES'] as $property) {
$arFieldsCopy['PROPERTY_VALUES'][$property['CODE']] = $property['VALUE'];
}
//print_r($arFieldsCopy['PROPERTY_VALUES']);
$el = new CIBlockElement();
if ($NEW_ID = $el->Add($arFieldsCopy)) {
$el ->Update($NEW_ID,$arFieldsCopy['PROPERTY_VALUES']);
echo 'Элемент скопирован. ID нового элемента: ' . $NEW_ID;
} else {
echo 'Error: ' . $el->LAST_ERROR;
}
}
return false;
}
}
}
|