Добрый день.
Возникла необходимость реализовать возможность переключения типа цен от различный факторов.
Нашёл информацию о событии "OnGetOptimalPrice" код описан ниже.
Делаю всю по инструкцию, но в итоге в корзине остаются всю как и было, а при добавлении нового товара вылазиет ошибка "Не указана валюта цены".
На форуме раньше вопрос поднимался, но адыкватного решения так и не нашлось.
Писали только , что проблема скорее всего в результирующем массиве.
Где может быть ошибка?
Заранее спасибо.
[B]Результирующий массив:[/B]
[CODE]
return array(
'PRICE' => array(
"ID" => $PRICE_ARRAY["ID"],
'CATALOG_GROUP_ID' => $PRICE_ARRAY["CATALOG_GROUP_ID"],
'PRICE' => $PRICE_ARRAY["PRICE"],
'CURRENCY' => $PRICE_ARRAY["CURRENCY"],
'ELEMENT_IBLOCK_ID' => $intProductID,
'VAT_INCLUDED' => "N",
),
"DISCOUNT_PRICE" => $PRICE_ARRAY["PRICE"]-100,
'DISCOUNT' => array(
'ID' => 2,
'SITE_ID' => false,
'ACTIVE' => "Y",
'ACTIVE_FROM' => ConvertTimeStamp(time(), "FULL"),
'ACTIVE_TO' => ConvertTimeStamp(time()+36000, "FULL"),
'RENEWAL' => 'N',
'NAME' => 'SERVERiST',
'SORT' => 1,
'MAX_DISCOUNT' => 100,
'VALUE_TYPE' => 'F',
'VALUE' => 100,
"CURRENCY" => $PRICE_ARRAY["CURRENCY"],
'COUPON' => 0,
'COUPON_ONE_TIME' => 0,
'COUPON_ACTIVE' => 0,
)
);
[/CODE]
[B]Собственно сам код:[/B]
[CODE]
AddEventHandler("catalog", "OnGetOptimalPrice", "MyGetOptimalPrice");
function MyGetOptimalPrice(
$intProductID,
$quantity = 1,
$arUserGroups = array(),
$renewal = "N",
$arPrices = array(),
$siteID = false,
$arDiscountCoupons = false
) {
$PRICE_ARRAY = array();
if(!empty($intProductID)) {
//определение и установка нужной цены
$arSelect = array(
'IBLOCK_ID',
'ID',
'NAME',
'CATALOG_GROUP_1', //цена по наличию
'CATALOG_GROUP_5' //цена под заказ
);
$arFilter = array(
'IBLOCK_ID' => 2,
'ID' => $intProductID
);
$res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
$element = $res->GetNext();
$rsPrices = CPrice::GetList(array(), array('PRODUCT_ID' => $element['ID'], 'CATALOG_GROUP_ID' => 1));
if ($arPrice = $rsPrices->Fetch()) {
$PRICE_ARRAY = $arPrice;
}
if($element['CATALOG_QUANTITY'] > 0) {
$price = $element['CATALOG_PRICE_5'];
$group = 5;
} else {
$price = $element['CATALOG_PRICE_5'];
$group = 5;
}
//если задан купон скидки
if(!empty($arDiscountCoupons)) {
$arSelectCoup = array('DISCOUNT_ID');
$arFilterCoup = array(
'COUPON' => $arDiscountCoupons[0]
);
$recCoup = CCatalogDiscountCoupon::GetList(
array(),
$arFilterCoup,
false,
false,
$arSelectCoup
);
$coupon = $recCoup->GetNext();
$discount = CCatalogDiscount::GetByID($coupon['DISCOUNT_ID']);
}
}
/* echo $group;
echo "<pre>";
var_dump($PRICE_ARRAY);
echo "</pre>";*/
return array(
'PRICE' => array(
"ID" => $PRICE_ARRAY["ID"],
'CATALOG_GROUP_ID' => $PRICE_ARRAY["CATALOG_GROUP_ID"],
'PRICE' => $PRICE_ARRAY["PRICE"],
'CURRENCY' => $PRICE_ARRAY["CURRENCY"],
'ELEMENT_IBLOCK_ID' => $intProductID,
'VAT_INCLUDED' => "N",
),
"DISCOUNT_PRICE" => $PRICE_ARRAY["PRICE"]-100,
'DISCOUNT' => array(
'ID' => 2,
'SITE_ID' => false,
'ACTIVE' => "Y",
'ACTIVE_FROM' => ConvertTimeStamp(time(), "FULL"),
'ACTIVE_TO' => ConvertTimeStamp(time()+36000, "FULL"),
'RENEWAL' => 'N',
'NAME' => 'SERVERiST',
'SORT' => 1,
'MAX_DISCOUNT' => 100,
'VALUE_TYPE' => 'F',
'VALUE' => 100,
"CURRENCY" => $PRICE_ARRAY["CURRENCY"],
'COUPON' => 0,
'COUPON_ONE_TIME' => 0,
'COUPON_ACTIVE' => 0,
)
);
}
[/CODE]