Корректировка цены товара в корзине при обновлении страницы 1с-Битрикс


Для того, чтобы в реальном времени изменить цену добавленного в корзину товара можно добавить следующий обработчик в файл 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).