Код |
---|
AddEventHandler('catalog', 'OnProductUpdate', ['MyClass', 'OnProductUpdateHandler']); class MyClass { function OnProductUpdateHandler($id, &$arFields) { $arFields["QUANTITY"] = 100; } } 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']); } } |
Цель, при изменении/добавлении поля "Доступное количество" произвести сброс до 100 при условии , если поставили количество больше ста.