Кастомизация отправки товара в корзину и поддержание актуальной информации в ней. CatalogProductProvider (ajax_buy.php -> init.php -> CCatalogProductProviderCustom.php)
<?if (!CModule::IncludeModule("sale") || !CModule::IncludeModule("catalog"))
return false;
IncludeModuleLangFile(__FILE__);
class CCatalogProductProviderCustom extends CCatalogProductProvider
{
//обработка элементов корзины
public static function GetProductData($params)
{
$result = parent::GetProductData($params);
//Задааем ограничение по количеству. Оно может вычисляться собственной функцией
$max = 10;
$params['QUANTITY'] = ($params['QUANTITY'] > $max) ? $max : $params['QUANTITY'];
$result['QUANTITY'] = $params['QUANTITY'];
//обязательно устанавливаем максимально возможное доступное кол-во товара, т.к. по умочанию это значение берется из остатка в Торговом каталоге
$result['AVAILABLE_QUANTITY'] = $max;
return $result;
}
//обработка элементов заказа
public static function OrderProduct($params)
{
$result = parent::OrderProduct($params);
return $result;
}
}
?>
<?
if ( file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/CCatalogProductProviderCustom.php") ){
require_once($_SERVER["DOCUMENT_ROOT"].'/local/php_interface/include/CCatalogProductProviderCustom.php');
}
?>
<?
$arFields = array(
"PRODUCT_ID" => $arItemInfo['ID'],
"PRODUCT_XML_ID" => $_REQUEST['id'],
"PRODUCT_PRICE_ID" => 1,
"PRICE" => $arPrice["PRICE"],
"CURRENCY" => "RUB",
"WEIGHT" => 0,
"QUANTITY" => $_REQUEST['quant'],
"LID" => LANG,
"DELAY" => "N",
"CAN_BUY" => "Y",
"NAME" => $arItemInfo['NAME'],
"NOTES" => $arStoreInfo['XML_ID'],
"DETAIL_PAGE_URL" => $arItemInfo['DETAIL_PAGE_URL'],
"MODULE" => "catalog", // !!!! обязательно catalog !!!!
//"IGNORE_CALLBACK_FUNC" => 'Y'
//"CALLBACK_FUNC" => 'CatalogBasketCallback',
//"ORDER_CALLBACK_FUNC" => 'CatalogBasketOrderCallback',
//"PRODUCT_PROVIDER_CLASS" => 'CCatalogProductProvider'
"PRODUCT_PROVIDER_CLASS" => 'CCatalogProductProviderCustom',
);
$res = CSaleBasket::Add($arFields);
?>