Получаем минимальную цену товара через api Битрикса
Что бы получить минимальную цену товара для конкретного пользователя необходимо проверить товар, содержит ли он торговые предложения или он простой. После этого выполняем код который можно запихнуть в функцию. Например так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
$productID = 55437; print_r(wd_getOptimalPrice($productID, IBLOCK_MAIN_ID)); function wd_getOptimalPrice($productID, $iblock_id = 0) { \Bitrix\Main\Loader::includeModule('iblock'); \Bitrix\Main\Loader::includeModule('catalog'); global $USER; $arPrice = []; $quantity = 1; $renewal = 'N'; $arIfSku = CCatalogSKU::getExistOffers($productID, $iblock_id); if(is_array($arIfSku) && $arIfSku[$productID] === true) { $iblock_info = CCatalogSKU::GetInfoByProductIBlock($iblock_id); if(is_array($iblock_info)) { $rsOffers = CIBlockElement::GetList(array("PRICE" => "ASC"), array("IBLOCK_ID" => $iblock_info["IBLOCK_ID"], "PROPERTY_" . $iblock_info["SKU_PROPERTY_ID"] => $productID)); $arOffer = $rsOffers->GetNext(); $arPrice = CCatalogProduct::GetOptimalPrice($arOffer['ID'], $quantity, $USER->GetUserGroupArray(), $renewal); if (!$arPrice || count($arPrice) <= 0) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($arOffer['ID'], $quantity, $USER->GetUserGroupArray())) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($arOffer['ID'], $quantity, $USER->GetUserGroupArray(), $renewal); } } } } else { $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); if (!$arPrice || count($arPrice) <= 0) { if ($nearestQuantity = CCatalogProduct::GetNearestQuantityPrice($productID, $quantity, $USER->GetUserGroupArray())) { $quantity = $nearestQuantity; $arPrice = CCatalogProduct::GetOptimalPrice($productID, $quantity, $USER->GetUserGroupArray(), $renewal); } } } return $arPrice; } |
Необходимо быть внимательным. Внутри функции используется функция GetOptimalPrice и у нее есть параметр siteID. Описание параметр siteID из официальной документации: «Сайт, для которого производится вычисление. Если параметр не указан либо равен false, то берется текущий сайт (константа SITE_ID). При вызове в агентах, обработчиках событий или вне контекста текущего сайта явное указание обязательно, в противном случае возвращаемый результат непредсказуем.» GetOptimalPrice