Для того, чтобы в реальном времени изменить цену добавленного в корзину товара можно добавить следующий обработчик в файл init.php, который будет проверять и корректировать цену со событию обновления страницы:
<?php
AddEventHandler('main', 'OnProlog', 'updateBasketPrice');
function updateBasketPrice() {
CModule::IncludeModule('sale');
CModule::IncludeModule('catalog');
$dbBasketItems = CSaleBasket::GetList(
array(),
array(
'FUSER_ID' => CSaleBasket::GetBasketUserID(),
'LID' => SITE_ID,
'ORDER_ID' => 'NULL'
),
false,
false,
array('ID', 'PRODUCT_ID', 'PRICE', 'BASE_PRICE', 'DISCOUNT_PRICE')
);
while ($arItem = $dbBasketItems->Fetch()) {
// цену берем из свойства "CUSTOM_PRICE" товара
$arRes = CCatalogProduct::GetByIDEx($arItem['PRODUCT_ID']);
if ($arRes) {
if ($arRes['PROPERTIES']['CUSTOM_PRICE']['VALUE']) {
$arFields['PRICE'] = $arRes['PROPERTIES']['CUSTOM_PRICE']['VALUE'];
$arFields['CUSTOM_PRICE'] = 'Y';
}
}
if (!empty($arFields)) \CSaleBasket::Update($arItem['ID'], $arFields);
}
}
В данном примере новая цена берется из свойства товара ‘CUSTOM_PRICE’, обработчик можно доработать под свои нужды, проверялось на 1с-Битрикс: Управление сайтом 20.0.1650. (версия модуля интернет-магазин 20.0.687).