GetOptimalPrice
Описание и параметры
array CCatalogProduct::GetOptimalPrice( int intProductID[, int quantity = 1[, array arUserGroups = array()[, string renewal = "N"[, array arPrices = array()[, string siteID = false[, array arDiscountCoupons = false]]]]]] );
Метод возвращает параметры наименьшей цены товара productID с учетом скидок в количестве quantity для посетителя, входящего в группы пользователей arUserGroups. Метод статический.
Примечание: начиная с версии 16.6.3 модуля Торговый каталог, при включенном режиме объединенных скидок результат зависит от дополнительных условий:
- перед вызовом метода CCatalogProduct::GetOptimalPrice либо не было вызова CCatalogProduct::setUseDiscount, либо он был вызван со значением true - будет возвращена цена с учетом правил корзины, которые можно показать в каталоге;
- если был вызов метода CCatalogProduct::setUseDiscount(false), тогда:
- если в системе отсутствуют скидки, зависящие от типа цен, то метод возвращает минимальную цену товара среди всех типов;
- если же имеются скидки, зависящие от типа цен, то метод возвращает ту цену товара, которая будет наименьшей среди всех цен после применения всех тех скидок, которые могут быть показаны в контексте каталога товаров.
Параметры вызова
Параметр | Описание | С версии |
---|---|---|
intProductID | Код товара. До версии 12.0.0 параметр назывался productID. | |
quantity | Приобретаемое количество. | |
arUserGroups | Массив групп пользователей. Если он пуст, то будут взяты группы текущего пользователя (при условии существования глобальной переменной $USER класса CUser, в случае отсутствия будет использована группа с кодом 2).
Если группы пользователей передаются в вызове, к ним будет принудительно добавлена группа с кодом 2 (Все пользователи) в случае ее отсутствия. | |
renewal | "N" - для товара (в т.ч. продажи контента), "Y" - для продления подписки (только продажа контента). Значение "Y" - служебное и может быть использовано только при реализации собственных административных страниц работы с заказами. | |
arPrices | Массив цен. Если он не пуст, то пересчет идет не по ценам из базы данных, а по ценам из этого массива. Представляет собой массив ассоциативных массивов с ключами:
| 4.0.5 |
siteID | Сайт, для которого производится вычисление. Если параметр не указан либо равен false, то берется текущий сайт (константа SITE_ID ). При вызове в агентах, обработчиках событий или вне контекста текущего сайта явное указание обязательно, в противном случае возвращаемый результат непредсказуем. | 4.0.6 |
arDiscountCoupons | Массив купонов, которые влияют на выборку скидок. Если задано значение false, то массив купонов будет взят из CCatalogDiscountCoupon::GetCoupons. Если следует исключить использование купонов, необходимо явно передать пустой массив (array()).
Примечание: с версии 15.0.4 купоны берутся из менеджера купонов \Bitrix\Sale\DiscountCouponsManager модуля Интернет-магазин, а при его отсутствии - по-старому из CCatalogDiscountCoupon::GetCoupons.
| 5.1.0 |
Возвращаемые значения
Массив вида:
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) (в магазин всегда отдаются цены с включенным НДС) ) )
Примечание. С версии 15.0.6 ключ RESULT_PRICE заполняется данными и в том случае, когда использованы обработчики события OnGetOptimalPrice. Параметры заданные методами CCatalogProduct::setUsedCurrency и CCatalogProduct::setPriceVatIncludeMode при этом учитываются, параметры заданные методом CCatalogProduct::setUseDiscount - нет.
Обратите внимание, что DISCOUNT_PRICE - это минимальная цена в валюте, заданной вызовом метода CCatalogProduct::setUsedCurrency, либо это минимальная цена (если CCatalogProduct::setUsedCurrency не использовался) в базовой валюте системы.
Примеры использования
<? $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); } } echo "<pre>"; print_r($arPrice); echo "</pre>"; ?>
© «Битрикс», 2001-2024, «1С-Битрикс», 2024