Битрикс выводим оптимальную цену со скидкой

Как известно, цена в товарах битрикса хранится не в свойствах, а в полях каталога. Цену необходимо выводить динамически, т.к. могут появиться скидки.

Вывести цену со скидкой и старую цену в Битриксе

Для начала посмотрим на такой код:

<? 
global $USER; 
$productID = 7813; 
$quantity = 1; 
$renewal = 'N'; 
$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);
    }
}
//print_r($arPrice);

Получаем массив со следующими ключами:

array(
"PRICE" => массив параметров цены, из которой была получена минимальная. Устарел, не используется с версии 15.0.2 (необходимо использовать ключ RESULT_PRICE). Содержит ключи
    "ID" - ID ценового предложения,
    "CATALOG_GROUP_ID" - ID типа цены,
    "PRICE" - величина исходной цены,
    "CURRENCY" - валюта исходной цены,
    "ELEMENT_IBLOCK_ID" - ID инфоблока товара, которому принадлежит ценовое предложение,
    "VAT_INCLUDED" - включен ли НДС в цену (Y/N),
    "VAT_RATE" - величина ставки НДС в процентах,
"DISCOUNT_PRICE" => минимальная цена в базовой_валюте,
"DISCOUNT" => самая первая скидка из DISCOUNT_LIST. Устарел, не используется с версии 12.5.0,
"DISCOUNT_LIST" => список скидок, примененных к товару. Инкрементный массив, скидки идут в порядке применения. Каждая запись описывает скидку, 
>array(
    "ID" => ID скидки
    "TYPE" => тип (накопительная или нет),
    "SITE_ID" => сайт,
    "ACTIVE" => активность,
    "ACTIVE_FROM", "ACTIVE_TO" => даты активности скидки,
    "RENEWAL" => применяется к товару или к продлению подписки,
    "NAME" =>название,
    "SORT" => сортировка,
    "MAX_DISCOUNT" => максимальная величина скидки в валюте,
    "VALUE_TYPE" => процентная, абсолютная скидка либо фиксированная цена,
    "VALUE" => величина скидки,
    "CURRENCY" => валюта скидки,
    "PRIORITY" => приоритет,
    "LAST_DISCOUNT" => прекратить или нет применения скидок,
    "COUPON" => купон (если есть),
    "COUPON_ONE_TIME" => тип купона,
    "COUPON_ACTIVE" => активность купона,
    "MODULE_ID" => модуль, к которому относится скидка
    "HANDLERS" => массив модулей, требуемых для условий скидки
   )
 "PRODUCT_ID" => ID товара,
 "RESULT_PRICE" => array(   
   "PRICE_TYPE_ID" => ID типа цены
   "BASE_PRICE" => исходная цена
   "DISCOUNT_PRICE" => цена со скидкой
   "CURRENCY" => валюта результата
   "DISCOUNT" => величина скидки
   "PERCENT" => процент скидки
   "VAT_RATE" => величина ставки НДС в процентах
   "VAT_INCLUDED" => включен ли НДС в цену (Y/N) (в магазин всегда отдаются цены с включенным НДС)
    )
)

“DISCOUNT_PRICE” – содержит минимальную цену, именно это нам и нужно. Остальные параметры вы можете использовать для своих условий.
$productID – id товара
$quantity – количество
$renewal – пропускаем этот параметр

Таким образом, передав правильные параметры по API битрикса, можно узнать всю необходимую информацию по ценам и по скидкам. Конечно, при условии, что элемент инфоблока является товаров.

Если на вашем проекте необходимо вывести скидку на товарах, или решить похожие задачи, обращайтесь

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *