В дополнение к предыдущему посту, хочу поделиться функцией, которая достаёт список скидок, применяемых к товару в корзине (в админке "Скидка на товар").
Скидка на товар устанавливается при добавлении товара в корзину функцией (о чем говорит наличие в таблице b_sale_basket поля DISCOUNT_PRICE). То есть скидка пересчитывается по какому-то конкретному событию, скорее всего это добавление/удаление/редактирование скидки через админку. В этой функции я подсмотрел строки, которые позволят достать список скидок, применяемых к товару.
На форуме, подсказали, что есть функция , которая делает тоже самое, что и вышеописанная getDiscountList.
По крайней мере, результат один и тот же )
Скидка на товар устанавливается при добавлении товара в корзину функцией (о чем говорит наличие в таблице b_sale_basket поля DISCOUNT_PRICE). То есть скидка пересчитывается по какому-то конкретному событию, скорее всего это добавление/удаление/редактирование скидки через админку. В этой функции я подсмотрел строки, которые позволят достать список скидок, применяемых к товару.
- В файл init.php добавляем:
// достаем список скидок, применяемых к товару в корзине if (!function_exists("getDiscountList")) { function getDiscountList($PRODUCT_ID, $QUANTITY = 1, $strProductProviderClass = "CCatalogProductProvider", $strCallbackFunc = "") { CModule::IncludeModule("sale"); $arCallbackPrice = false; if (!empty($strProductProviderClass)) { if ($productProvider = CSaleBasket::GetProductProvider(array( 'MODULE' => 'catalog', 'PRODUCT_PROVIDER_CLASS' => $strProductProviderClass)) ) { $providerParams = array( 'PRODUCT_ID' => $PRODUCT_ID, 'QUANTITY' => $QUANTITY, 'RENEWAL' => 'N' ); /* @var $productProvider CCatalogProductProvider */ $arCallbackPrice = $productProvider::GetProductData($providerParams); unset($providerParams); } } elseif (!empty($strCallbackFunc)) { $arCallbackPrice = CSaleBasket::ExecuteCallbackFunction( $strCallbackFunc, 'catalog', $PRODUCT_ID, $QUANTITY, 'N' ); } return $arCallbackPrice; } } - В файле basket_items.php компонента sale.basket.basket вызываем эту функцию:
... $discountList = array(); foreach ($arResult["GRID"]["ROWS"] as $k => $arItem): if ($arItem["DELAY"] == "N" && $arItem["CAN_BUY"] == "Y"): $discountListProduct = getDiscountList($arItem['PRODUCT_ID'], $arItem['QUANTITY'], $arItem['PRODUCT_PROVIDER_CLASS']); $discountList = array_merge($discountList, $discountListProduct['DISCOUNT_LIST']); ... endif; endforeach;
На форуме, подсказали, что есть функция , которая делает тоже самое, что и вышеописанная getDiscountList.
По крайней мере, результат один и тот же )