AddEventHandler('catalog', 'OnProductUpdate', ['MyClass', 'OnProductUpdateHandler']);
class MyClass
{
function OnProductUpdateHandler($id, &$arFields)
{
$arLoadProductArray = $arFields['QUANTITY'] > 0 ? Array("IN_STOCK" => "Y") : Array("IN_STOCK" => "N");
}
}
AddEventHandler("catalog", "OnBeforeProductUpdate", "notInStore");
function notInStore($ID,&$arFields){
if (($arFields['QUANTITY'] != $arFields['OLD_QUANTITY']) || (!is_null($arFields['QUANTITY']) && is_null($arFields['OLD_QUANTITY']))) {
if (intval($arFields["QUANTITY"]) > 100) {
$arFields["QUANTITY"] = 100;
}
}
}
Меняю Доступное количеств в инфоблоке.
А также есть ли такое событие, чтобы при нескольких складах , считал только тот склад который обновился?
$eventManager->addEventHandler('catalog','OnStoreProductAdd', 'UpdateAvailableQuantity');
$eventManager->addEventHandler('catalog','OnStoreProductUpdate', 'UpdateAvailableQuantity');
$eventManager->addEventHandler('catalog','OnStoreProductDelete', 'DeletesAvailableQuantity');
use \Bitrix\Main\Loader;
Loader::includeModule('catalog');
function UpdateAvailableQuantity($id, $arFields){
$obProduct = new CCatalogProduct();
if (intval($arFields["AMOUNT"])>=100){
$obProduct->Update($arFields["PRODUCT_ID"], ['QUANTITY' => 100, 'SUBSCRIBE' => 'D']);
}else{
if ($arFields["AMOUNT"]==0)
$obProduct->Update($arFields["PRODUCT_ID"], ['QUANTITY' => 0, 'SUBSCRIBE' => 'D']);
else
$obProduct->Update($arFields["PRODUCT_ID"], ['QUANTITY' => $arFields["AMOUNT"], 'SUBSCRIBE' => 'D']);
}
}
Проходит 2 раза, так как 2 склада, и это плохо.