Добрый день.
Возникла необходимость реализовать возможность переключения типа цен от различный факторов.
Нашёл информацию о событии "OnGetOptimalPrice" код описан ниже.
Делаю всю по инструкцию, но в итоге в корзине остаются всю как и было, а при добавлении нового товара вылазиет ошибка "Не указана валюта цены".
На форуме раньше вопрос поднимался, но адыкватного решения так и не нашлось.
Писали только , что проблема скорее всего в результирующем массиве.
Где может быть ошибка?
Заранее спасибо.
Результирующий массив:
Собственно сам код:
Возникла необходимость реализовать возможность переключения типа цен от различный факторов.
Нашёл информацию о событии "OnGetOptimalPrice" код описан ниже.
Делаю всю по инструкцию, но в итоге в корзине остаются всю как и было, а при добавлении нового товара вылазиет ошибка "Не указана валюта цены".
На форуме раньше вопрос поднимался, но адыкватного решения так и не нашлось.
Писали только , что проблема скорее всего в результирующем массиве.
Где может быть ошибка?
Заранее спасибо.
Результирующий массив:
Код |
---|
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, ) ); |
Собственно сам код:
Код |
---|
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, ) ); } |