Caribasius
3/23/2017 - 1:36 PM

Кастомизация отправки товара в корзину и поддержание актуальной информации в ней. CatalogProductProvider (ajax_buy.php -> init.php -> CCata

Кастомизация отправки товара в корзину и поддержание актуальной информации в ней. 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);
?>