Здравствуйте!
Понятно, что компонент каталог сам поставляет в шаблоны информацию по скидкам, дело в том что в некоторых местах на сайте запрос этой информации необходимо выводить в news:list или вовсе на странице получающей информацию по getList или методом GetCatalogProductPrice
Следующий код:
<?php
require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';
if(CModule::IncludeModule("catalog")) {
$product = GetCatalogProductPrice(37, 1);
var_dump($product);
}
возвращает следующее:
array(14) { ["ID"]=> string(2) "16" ["PRODUCT_ID"]=> string(2) "37" ["EXTRA_ID"]=> NULL ["CATALOG_GROUP_ID"]=> string(1) "1" ["PRICE"]=> string(6) "555.00" ["CURRENCY"]=> string(3) "RUB" ["TIMESTAMP_X"]=> string(19) "07.03.2019 15:24:21" ["QUANTITY_FROM"]=> NULL ["QUANTITY_TO"]=> NULL ["BASE"]=> string(1) "Y" ["SORT"]=> string(3) "100" ["CATALOG_GROUP_NAME"]=> string(0) "" ["CAN_ACCESS"]=> string(1) "Y" ["CAN_BUY"]=> string(1) "Y" }
555 рублей это стоимость товара без скидок.
Сейчас на данный товар(с Id 37) распространяется скидка 50%. Как получить цену с учётом действующих скидок для данного товара, например с целью дальнейшего использования в result_modifier.php?
____________________________________________________________ ____________________
После того как задал вопрос нашёл вот такое решение:
$idProduct = 37;
$res = CCatalogProduct::GetOptimalPrice($idProduct,1,array(),"N",array(),false,false);
var_dump($res);
возвращает следующую информацию:
array(6) { ["PRICE"]=> array(7) { ["ID"]=> string(2) "16" ["CATALOG_GROUP_ID"]=> string(1) "1" ["PRICE"]=> string(6) "555.00" ["CURRENCY"]=> string(3) "RUB" ["ELEMENT_IBLOCK_ID"]=> int(1) ["VAT_RATE"]=> float(0) ["VAT_INCLUDED"]=> string(1) "N" } ["RESULT_PRICE"]=> array(10) { ["PRICE_TYPE_ID"]=> string(1) "1" ["BASE_PRICE"]=> float(555) ["DISCOUNT_PRICE"]=> float(277.5) ["CURRENCY"]=> string(3) "RUB" ["DISCOUNT"]=> float(277.5) ["PERCENT"]=> float(50) ["VAT_RATE"]=> float(0) ["VAT_INCLUDED"]=> string(1) "Y" ["UNROUND_BASE_PRICE"]=> float(555) ["UNROUND_DISCOUNT_PRICE"]=> float(277.5) } ["DISCOUNT_PRICE"]=> float(277.5) ["DISCOUNT"]=> array(23) { ["ID"]=> int(1) ["TYPE"]=> int(0) ["SITE_ID"]=> string(2) "s1" ["ACTIVE"]=> string(1) "Y" ["ACTIVE_FROM"]=> string(0) "" ["ACTIVE_TO"]=> string(0) "" ["RENEWAL"]=> string(1) "N" ["NAME"]=> string(17) "Скидка №1" ["SORT"]=> string(3) "100" ["MAX_DISCOUNT"]=> float(0) ["VALUE_TYPE"]=> string(1) "P" ["VALUE"]=> float(50) ["CURRENCY"]=> string(3) "RUB" ["PRIORITY"]=> int(1) ["LAST_DISCOUNT"]=> string(1) "Y" ["LAST_LEVEL_DISCOUNT"]=> string(1) "N" ["COUPON"]=> string(0) "" ["COUPON_ONE_TIME"]=> NULL ["COUPON_ACTIVE"]=> string(0) "" ["UNPACK"]=> string(348) "function($arOrder){$salecond_0_0=function($row){return (((isset($row['CATALOG']['PARENT_ID']) ? ((isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)) || ($row['CATALOG']['PARENT_ID'] == 37)) : (isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)))));}; return (((CSaleBasketFilter::ProductFilter($arOrder, $salecond_0_0)))); };" ["CONDITIONS"]=> string(365) "a:3:{s:8:"CLASS_ID";s:9:"CondGroup";s:4:"DATA";a:2:{s:3:"All";s:3:"AND";s:4:"True";s:4:"True";}s:8:"CHILDREN";a:1:{i:0;a:3:{s:8:"CLASS_ID";s:20:"CondBsktProductGroup";s:4:"DATA";a:2:{s:5:"Found";s:5:"Found";s:3:"All";s:2:"OR";}s:8:"CHILDREN";a:1:{i:0;a:2:{s:8:"CLASS_ID";s:13:"CondIBElement";s:4:"DATA";a:2:{s:5:"logic";s:5:"Equal";s:5:"value";a:1:{i:1;i:37;}}}}}}}" ["HANDLERS"]=> array(2) { ["MODULES"]=> array(0) { } ["EXT_FILES"]=> array(0) { } } ["MODULE_ID"]=> string(4) "sale" } ["DISCOUNT_LIST"]=> array(1) { [0]=> array(23) { ["ID"]=> int(1) ["TYPE"]=> int(0) ["SITE_ID"]=> string(2) "s1" ["ACTIVE"]=> string(1) "Y" ["ACTIVE_FROM"]=> string(0) "" ["ACTIVE_TO"]=> string(0) "" ["RENEWAL"]=> string(1) "N" ["NAME"]=> string(17) "Скидка №1" ["SORT"]=> string(3) "100" ["MAX_DISCOUNT"]=> float(0) ["VALUE_TYPE"]=> string(1) "P" ["VALUE"]=> float(50) ["CURRENCY"]=> string(3) "RUB" ["PRIORITY"]=> int(1) ["LAST_DISCOUNT"]=> string(1) "Y" ["LAST_LEVEL_DISCOUNT"]=> string(1) "N" ["COUPON"]=> string(0) "" ["COUPON_ONE_TIME"]=> NULL ["COUPON_ACTIVE"]=> string(0) "" ["UNPACK"]=> string(348) "function($arOrder){$salecond_0_0=function($row){return (((isset($row['CATALOG']['PARENT_ID']) ? ((isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)) || ($row['CATALOG']['PARENT_ID'] == 37)) : (isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)))));}; return (((CSaleBasketFilter::ProductFilter($arOrder, $salecond_0_0)))); };" ["CONDITIONS"]=> string(365) "a:3:{s:8:"CLASS_ID";s:9:"CondGroup";s:4:"DATA";a:2:{s:3:"All";s:3:"AND";s:4:"True";s:4:"True";}s:8:"CHILDREN";a:1:{i:0;a:3:{s:8:"CLASS_ID";s:20:"CondBsktProductGroup";s:4:"DATA";a:2:{s:5:"Found";s:5:"Found";s:3:"All";s:2:"OR";}s:8:"CHILDREN";a:1:{i:0;a:2:{s:8:"CLASS_ID";s:13:"CondIBElement";s:4:"DATA";a:2:{s:5:"logic";s:5:"Equal";s:5:"value";a:1:{i:1;i:37;}}}}}}}" ["HANDLERS"]=> array(2) { ["MODULES"]=> array(0) { } ["EXT_FILES"]=> array(0) { } } ["MODULE_ID"]=> string(4) "sale" } } ["PRODUCT_ID"]=> int(37) }
Тем не менее может быть кто то предложит более оптимальное решение?
____________________________________________________________ ___
Написал функцию которая возвращает старую и новую цену, а так же флаг наличия скидки. Если кому потребуется код доступен здесьhttp://blog.ivru.net/?id=65
Понятно, что компонент каталог сам поставляет в шаблоны информацию по скидкам, дело в том что в некоторых местах на сайте запрос этой информации необходимо выводить в news:list или вовсе на странице получающей информацию по getList или методом GetCatalogProductPrice
Следующий код:
<?php
require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';
if(CModule::IncludeModule("catalog")) {
$product = GetCatalogProductPrice(37, 1);
var_dump($product);
}
возвращает следующее:
array(14) { ["ID"]=> string(2) "16" ["PRODUCT_ID"]=> string(2) "37" ["EXTRA_ID"]=> NULL ["CATALOG_GROUP_ID"]=> string(1) "1" ["PRICE"]=> string(6) "555.00" ["CURRENCY"]=> string(3) "RUB" ["TIMESTAMP_X"]=> string(19) "07.03.2019 15:24:21" ["QUANTITY_FROM"]=> NULL ["QUANTITY_TO"]=> NULL ["BASE"]=> string(1) "Y" ["SORT"]=> string(3) "100" ["CATALOG_GROUP_NAME"]=> string(0) "" ["CAN_ACCESS"]=> string(1) "Y" ["CAN_BUY"]=> string(1) "Y" }
555 рублей это стоимость товара без скидок.
Сейчас на данный товар(с Id 37) распространяется скидка 50%. Как получить цену с учётом действующих скидок для данного товара, например с целью дальнейшего использования в result_modifier.php?
____________________________________________________________
После того как задал вопрос нашёл вот такое решение:
$idProduct = 37;
$res = CCatalogProduct::GetOptimalPrice($idProduct,1,array(),"N",array(),false,false);
var_dump($res);
возвращает следующую информацию:
array(6) { ["PRICE"]=> array(7) { ["ID"]=> string(2) "16" ["CATALOG_GROUP_ID"]=> string(1) "1" ["PRICE"]=> string(6) "555.00" ["CURRENCY"]=> string(3) "RUB" ["ELEMENT_IBLOCK_ID"]=> int(1) ["VAT_RATE"]=> float(0) ["VAT_INCLUDED"]=> string(1) "N" } ["RESULT_PRICE"]=> array(10) { ["PRICE_TYPE_ID"]=> string(1) "1" ["BASE_PRICE"]=> float(555) ["DISCOUNT_PRICE"]=> float(277.5) ["CURRENCY"]=> string(3) "RUB" ["DISCOUNT"]=> float(277.5) ["PERCENT"]=> float(50) ["VAT_RATE"]=> float(0) ["VAT_INCLUDED"]=> string(1) "Y" ["UNROUND_BASE_PRICE"]=> float(555) ["UNROUND_DISCOUNT_PRICE"]=> float(277.5) } ["DISCOUNT_PRICE"]=> float(277.5) ["DISCOUNT"]=> array(23) { ["ID"]=> int(1) ["TYPE"]=> int(0) ["SITE_ID"]=> string(2) "s1" ["ACTIVE"]=> string(1) "Y" ["ACTIVE_FROM"]=> string(0) "" ["ACTIVE_TO"]=> string(0) "" ["RENEWAL"]=> string(1) "N" ["NAME"]=> string(17) "Скидка №1" ["SORT"]=> string(3) "100" ["MAX_DISCOUNT"]=> float(0) ["VALUE_TYPE"]=> string(1) "P" ["VALUE"]=> float(50) ["CURRENCY"]=> string(3) "RUB" ["PRIORITY"]=> int(1) ["LAST_DISCOUNT"]=> string(1) "Y" ["LAST_LEVEL_DISCOUNT"]=> string(1) "N" ["COUPON"]=> string(0) "" ["COUPON_ONE_TIME"]=> NULL ["COUPON_ACTIVE"]=> string(0) "" ["UNPACK"]=> string(348) "function($arOrder){$salecond_0_0=function($row){return (((isset($row['CATALOG']['PARENT_ID']) ? ((isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)) || ($row['CATALOG']['PARENT_ID'] == 37)) : (isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)))));}; return (((CSaleBasketFilter::ProductFilter($arOrder, $salecond_0_0)))); };" ["CONDITIONS"]=> string(365) "a:3:{s:8:"CLASS_ID";s:9:"CondGroup";s:4:"DATA";a:2:{s:3:"All";s:3:"AND";s:4:"True";s:4:"True";}s:8:"CHILDREN";a:1:{i:0;a:3:{s:8:"CLASS_ID";s:20:"CondBsktProductGroup";s:4:"DATA";a:2:{s:5:"Found";s:5:"Found";s:3:"All";s:2:"OR";}s:8:"CHILDREN";a:1:{i:0;a:2:{s:8:"CLASS_ID";s:13:"CondIBElement";s:4:"DATA";a:2:{s:5:"logic";s:5:"Equal";s:5:"value";a:1:{i:1;i:37;}}}}}}}" ["HANDLERS"]=> array(2) { ["MODULES"]=> array(0) { } ["EXT_FILES"]=> array(0) { } } ["MODULE_ID"]=> string(4) "sale" } ["DISCOUNT_LIST"]=> array(1) { [0]=> array(23) { ["ID"]=> int(1) ["TYPE"]=> int(0) ["SITE_ID"]=> string(2) "s1" ["ACTIVE"]=> string(1) "Y" ["ACTIVE_FROM"]=> string(0) "" ["ACTIVE_TO"]=> string(0) "" ["RENEWAL"]=> string(1) "N" ["NAME"]=> string(17) "Скидка №1" ["SORT"]=> string(3) "100" ["MAX_DISCOUNT"]=> float(0) ["VALUE_TYPE"]=> string(1) "P" ["VALUE"]=> float(50) ["CURRENCY"]=> string(3) "RUB" ["PRIORITY"]=> int(1) ["LAST_DISCOUNT"]=> string(1) "Y" ["LAST_LEVEL_DISCOUNT"]=> string(1) "N" ["COUPON"]=> string(0) "" ["COUPON_ONE_TIME"]=> NULL ["COUPON_ACTIVE"]=> string(0) "" ["UNPACK"]=> string(348) "function($arOrder){$salecond_0_0=function($row){return (((isset($row['CATALOG']['PARENT_ID']) ? ((isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)) || ($row['CATALOG']['PARENT_ID'] == 37)) : (isset($row['CATALOG']['ID']) && ($row['CATALOG']['ID'] == 37)))));}; return (((CSaleBasketFilter::ProductFilter($arOrder, $salecond_0_0)))); };" ["CONDITIONS"]=> string(365) "a:3:{s:8:"CLASS_ID";s:9:"CondGroup";s:4:"DATA";a:2:{s:3:"All";s:3:"AND";s:4:"True";s:4:"True";}s:8:"CHILDREN";a:1:{i:0;a:3:{s:8:"CLASS_ID";s:20:"CondBsktProductGroup";s:4:"DATA";a:2:{s:5:"Found";s:5:"Found";s:3:"All";s:2:"OR";}s:8:"CHILDREN";a:1:{i:0;a:2:{s:8:"CLASS_ID";s:13:"CondIBElement";s:4:"DATA";a:2:{s:5:"logic";s:5:"Equal";s:5:"value";a:1:{i:1;i:37;}}}}}}}" ["HANDLERS"]=> array(2) { ["MODULES"]=> array(0) { } ["EXT_FILES"]=> array(0) { } } ["MODULE_ID"]=> string(4) "sale" } } ["PRODUCT_ID"]=> int(37) }
Тем не менее может быть кто то предложит более оптимальное решение?
____________________________________________________________
Написал функцию которая возвращает старую и новую цену, а так же флаг наличия скидки. Если кому потребуется код доступен здесь