Подскажите как правильно использовать OnSaleBasketItemBeforeSaved для добавления свойств товарам в корзине. Изначально задача была дописать к каждому товару в корзине артикул (строковое свойство элементов инфоблока) и статус (списочное свойство элементов инфоблока). Для этого использовали событие OnBeforeBasketAdd, но после обновления системы в корзине стали возникать дубли товаров. При каждой отправке товара в корзину добавляется запись, а не увеличивается кол-во. Опция модуля "Включить обработку устаревших событий" включена.
Скрытый текст |
---|
Код |
---|
/**
* @param $arFields
*/
public static function addPropertiesToBasket(&$arFields) {
$sEvents = '';
$sEvents .= "\n" . date('Y-m-d H:i:s') . "\t" . __LINE__;
$sEvents .= "\n" . 'Параметры обработчика # ' . var_export($arFields, true);
if (Loader::includeModule('iblock')) {
if (isset($arFields['PRODUCT_ID'])) {
$arFilter = array('ID' => $arFields['PRODUCT_ID']);
$arSelect = array();
foreach (self::$arProperties as $sProp => $sTitle) {
$arSelect[] = 'PROPERTY_' . $sProp;
}
$rsElement = CIBlockElement::GetList(
array('SORT' => 'ASC'),
$arFilter,
false,
false,
$arSelect
);
$iCount = count($arFields['PROPS']);
if ($arElement = $rsElement->GetNext()) {
foreach (self::$arProperties as $sProp => $sTitle) {
$bUpdate = false;
if ($iCount > 0) {
foreach ($arFields['PROPS'] as $iKey => $arProp) {
if (($arProp['CODE'] == $sProp) && isset($arElement['PROPERTY_' . $sProp . '_VALUE']) && (strlen($arElement['PROPERTY_' . $sProp . '_VALUE']) > 0)) {
$arFields['PROPS'][$iKey] = array(
'NAME' => $sTitle,
'CODE' => $sProp,
'VALUE' => $arElement['PROPERTY_' . $sProp . '_VALUE'],
'SORT' => 0
);
$bUpdate = true;
}
}
}
if (!$bUpdate && isset($arElement['PROPERTY_' . $sProp . '_VALUE']) && (strlen($arElement['PROPERTY_' . $sProp . '_VALUE']) > 0))
$arFields['PROPS'][] = array(
'NAME' => $sTitle,
'CODE' => $sProp,
'VALUE' => $arElement['PROPERTY_' . $sProp . '_VALUE'],
'SORT' => 0
);
}
}
}
}
if ((strlen($sEvents) > 0) && self::DO_LOG)
Debug::writeToFile("\n" . __CLASS__ . "\t" . __METHOD__ . "\n" . $sEvents, '', self::LOG_FILENAME);
return;
} |
|