Подскажите, знающие люди, где ошибка:
есть обработка на событии OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd
У товаров из одного набора (гарнитура) значение свойства KOD_GARNITURA одинаковое.
Свойство RELATED_PRODUCT (Привязка к элементам) - заполняется товарами с одинаковыми свойствами KOD_GARNITURA (исключая ID текущего товара)
тут все работает:
Код |
---|
AddEventHandler("iblock", "OnBeforeIBlockElementAdd", "upDateSet");
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "upDateSet");
function upDateSet(&$arFields)
{
// 370 - KOD_GARNITURA - Свойство типа строка
// 388 - RELATED_PRODUCT - Свойство типа Привязка к элементам
if ($arFields["IBLOCK_ID"] == 26)
{
//получаем массив с элементами, у которых такой же KOD_GARNITURA
$arRelated = array();
$kod = $arFields['PROPERTY_VALUES'][370][n0]['VALUE'];
if(!$kod) $kod = $arFields['PROPERTY_VALUES'][370][$arFields['ID'].':370']['VALUE'];
if($kod) { // если код гарнитура не пустое
$filter = array( 'IBLOCK_ID' => $arFields['IBLOCK_ID'], 'PROPERTY_KOD_GARNITURA' => $kod );
$arRes = CIBlockElement::GetList( false, $filter, false, false, array( 'ID' ) );
while ($arItem = $arRes->GetNext()) {
if ($arItem['ID'] != $arFields['ID']) {$arRelated[] = $arItem['ID'];}}//берем ID этих элементов. исключаем из этого массива ID текущего элемента
if(count($arRelated)>0) {$arFields["PROPERTY_VALUES"][388] = $arRelated;} //если элементов больше 0
else { $arFields["PROPERTY_VALUES"][388] = false;}
}
}
}
|
...но потребовалось сделать то же самое на OnAfterIBlockElementSetPropertyValuesEx
Код |
---|
AddEventHandler("iblock", "OnAfterIBlockElementSetPropertyValuesEx", "upDateOffers_PropertyValuesEx");
function upDateOffers_PropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUES, $FLAGS)
{
// 370 - KOD_GARNITURA - Свойство типа строка
// 388 - RELATED_PRODUCT - Свойство типа Привязка к элементам
if ($IBLOCK_ID == 26)
{
if($PROPERTY_VALUES["KOD_GARNITURA"]) {
$arRelated = array();
$filter = array( 'IBLOCK_ID' => $IBLOCK_ID, 'PROPERTY_KOD_GARNITURA' => $PROPERTY_VALUES["KOD_GARNITURA"] );
$arRes = CIBlockElement::GetList( false, $filter, false, false, array( 'ID' ) );
while ($arItem = $arRes->GetNext()) {
//берем ID этих элементов. исключаем из этого массива ID текущего элемента
if ($arItem['ID'] != $ELEMENT_ID) {$arRelated[] = $arItem['ID'];}
}
//если элементов больше 0
if(count($arRelated)>0) {
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array("RELATED_PRODUCT" => $arRelated));
} else {
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array("RELATED_PRODUCT" => false));
}
// очищаем массив, если код гарнитура не установлен
} else {
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array("RELATED_PRODUCT" => false));
}
}
}
|
...но не работает, подскажите, где ошибка...