Как посчитать стоимость товара или предложения со всеми скидками

Как посчитать стоимость товара или предложения со всеми скидками

Просмотров: 327
Вариант получения стоимости товара или предложения со всеми скидками в функции файла init.php
/***Как посчитать стоимость товара или предложения со всеми скидками***/
function getFinalPriceInCurrency($item_id, $sale_currency = 'RUB') { CModule::IncludeModule("iblock");  CModule::IncludeModule("catalog"); CModule::IncludeModule("sale");      global $USER;     $currency_code = 'RUB';     // Проверяем, имеет ли товар торговые предложения?     if(CCatalogSku::IsExistOffers($item_id)) {         // Пытаемся найти цену среди торговых предложений         $res = CIBlockElement::GetByID($item_id);         if($ar_res = $res->GetNext()) {             if(isset($ar_res['IBLOCK_ID']) && $ar_res['IBLOCK_ID']) {                 // Ищем все тогровые предложения                 $offers = CIBlockPriceTools::GetOffersArray(array(                     'IBLOCK_ID' => $ar_res['IBLOCK_ID'],                     'HIDE_NOT_AVAILABLE' => 'Y',                     'CHECK_PERMISSIONS' => 'Y'                 ), array($item_id), null, null, null, null, null, null, array('CURRENCY_ID' => $sale_currency), $USER->getId(), null);                 foreach($offers as $offer) {                     $price = CCatalogProduct::GetOptimalPrice($offer['ID'], 1, $USER->GetUserGroupArray(), 'N');                     if(isset($price['PRICE'])) {                         $final_price = $price['PRICE']['PRICE'];                         $currency_code = $price['PRICE']['CURRENCY'];                         // Ищем скидки и высчитываем стоимость с учетом найденных                         $arDiscounts = CCatalogDiscount::GetDiscountByProduct($item_id, $USER->GetUserGroupArray(), 1, SITE_ID);                         if(is_array($arDiscounts) && sizeof($arDiscounts) > 0) {                             $final_price = CCatalogProduct::CountPriceWithDiscount($final_price, $currency_code, $arDiscounts);                         }                         // Конец цикла, используем найденные значения                         break;                     }                 }             }         }     } else {         // Простой товар, без торговых предложений (для количества равному 1)         $price = CCatalogProduct::GetOptimalPrice($item_id, 1, $USER->GetUserGroupArray(), 'N');         // Получили цену?         if(!$price || !isset($price['PRICE'])) {             return false;         }         // Меняем код валюты, если нашли         if(isset($price['CURRENCY'])) {             $currency_code = $price['CURRENCY'];         }         if(isset($price['PRICE']['CURRENCY'])) {             $currency_code = $price['PRICE']['CURRENCY'];         }         // Получаем итоговую цену         $final_price = $price['PRICE']['PRICE'];         // Ищем скидки и пересчитываем цену товара с их учетом         $arDiscounts = CCatalogDiscount::GetDiscountByProduct($item_id, $USER->GetUserGroupArray(), "N", 1, SITE_ID);         if(is_array($arDiscounts) && sizeof($arDiscounts) > 0) {             $final_price = CCatalogProduct::CountPriceWithDiscount($final_price, $currency_code, $arDiscounts);         }     }     // Если необходимо, конвертируем в нужную валюту     if($currency_code != $sale_currency) {         $final_price = CCurrencyRates::ConvertCurrency($final_price, $currency_code, $sale_currency);     }     return $final_price; }

Ещё статьи:

01.12.2025 Задача алфавитный указатель товаров
Интересная задача для тренировки навыков.
Суть такая:
Алфавитный указатель товаров, но не стандартный где обычно сортировка разделов по названию происходит, а именно товаров.

01.12.2025 Junior разработчик PHP 2025
Периодически бывает вижу вакансии для джунов, и немного прозреваю от того что я вижу.
Обязанности джуна Junior разработчик PHP

29.11.2025 Обзор на маркетплейс модулей города по IP адресу
Неделю назад повёлся на предложение клиента пойти вариантом платного модуля для замены модуля выбора города, хотя изначально сказал, что там ловить нечего.
Итог тестов такой

© 2015-2026 Web админ
Связаться по WhatsApp