Created
September 29, 2025 08:43
-
-
Save EscApp2/b45e923c3dab561479e93e6f6e6db488 to your computer and use it in GitHub Desktop.
OnAfterIBlockElementChange
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <? | |
| if(!function_exists('BXIBlockAfterSave')){ | |
| function BXIBlockAfterSave($arFields){ | |
| foreach (GetModuleEvents("iblock", "OnBXIBlockAfterSave", true) as $arEvent){ | |
| ExecuteModuleEventEx($arEvent, array($arFields)); | |
| } | |
| } | |
| } | |
| class OnAfterIBlockElementChange{ | |
| static $EventData = []; | |
| static public function isNeedToHandle($eventType, $ID){ | |
| global $APPLICATION; | |
| $page = $APPLICATION->GetCurPage(true); | |
| if(!$ID || !$eventType){ | |
| return false; | |
| } | |
| switch ($page) { | |
| case "/bitrix/admin/iblock_element_edit.php": // admin detail page | |
| case "/bitrix/admin/iblock_subelement_edit.php": // admin detail page SKU tab | |
| case "/bitrix/admin/cat_product_edit.php": // public detail page | |
| if(!self::$EventData[$ID]['HANDLED'] && $eventType == "OnBXIBlockAfterSave"){ | |
| return true; | |
| } | |
| if(!self::$EventData[$ID]['HANDLED'] && $eventType == "OnEpilog"){ | |
| return true; | |
| } | |
| break; | |
| case "/bitrix/admin/iblock_element_admin.php": // admin list page | |
| case "/bitrix/admin/iblock_subelement_admin.php": // admin detail page SKU tab list action | |
| case "/bitrix/admin/cat_product_admin.php": // public list page (never see) | |
| if(!self::$EventData[$ID]['HANDLED'] && $eventType == "OnEpilog"){ | |
| return true; | |
| } | |
| break; | |
| default: | |
| if(!self::$EventData[$ID]['HANDLED']){ | |
| return true; | |
| } | |
| break; | |
| } | |
| return false; | |
| } | |
| static public function OnAfterIBlockElement(&$arFields){ | |
| self::$EventData[$arFields["ID"]]['EVENT_DATA'] = $arFields; | |
| if(self::isNeedToHandle(__FUNCTION__,$arFields["ID"])){ | |
| foreach (GetModuleEvents("iblock", "OnAfterIBlockElementChange", true) as $arEvent){ | |
| ExecuteModuleEventEx($arEvent, array($arFields)); | |
| } | |
| self::$EventData[$arFields["ID"]]['HANDLED'] = true; | |
| self::$EventData[$arFields["ID"]]['EVENT_DATA'] = []; | |
| } | |
| /* | |
| $event = new \Bitrix\Main\Event("iblock", "OnAfterIBlockElementChange",array($arFields)); | |
| $event->send(); | |
| if ($event->getResults()){ | |
| foreach($event->getResults() as $evenResult){ | |
| if($evenResult->getResultType() == \Bitrix\Main\EventResult::SUCCESS){ | |
| $arMacros["PRODUCTS"] = $evenResult->getParameters(); | |
| } | |
| } | |
| }*/ | |
| } | |
| static public function OnBXIBlockAfterSave($arFields){ | |
| self::$EventData[$arFields["ID"]]['EVENT_DATA'] = $arFields; | |
| if(self::isNeedToHandle(__FUNCTION__,$arFields["ID"])){ | |
| foreach (GetModuleEvents("iblock", "OnAfterIBlockElementChange", true) as $arEvent){ | |
| ExecuteModuleEventEx($arEvent, array($arFields)); | |
| } | |
| self::$EventData[$arFields["ID"]]['HANDLED'] = true; | |
| self::$EventData[$arFields["ID"]]['EVENT_DATA'] = []; | |
| } | |
| } | |
| static public function OnEpilog(){ | |
| foreach(self::$EventData as $ID => $arData){ | |
| $arFields = $arData['EVENT_DATA']; | |
| // ID important //$arFields empty if previously handled | |
| if(self::isNeedToHandle(__FUNCTION__,$ID)){ | |
| foreach (GetModuleEvents("iblock", "OnAfterIBlockElementChange", true) as $arEvent){ | |
| ExecuteModuleEventEx($arEvent, array($arFields)); | |
| } | |
| self::$EventData[$arFields["ID"]]['HANDLED'] = true; | |
| self::$EventData[$arFields["ID"]]['EVENT_DATA'] = []; | |
| } | |
| } | |
| } | |
| } | |
| AddEventHandler("iblock", "OnBXIBlockAfterSave",["OnAfterIBlockElementChange","OnBXIBlockAfterSave"]); | |
| AddEventHandler("iblock", "OnAfterIBlockElementUpdate",["OnAfterIBlockElementChange","OnAfterIBlockElement"]); | |
| AddEventHandler("iblock", "OnAfterIBlockElementAdd",["OnAfterIBlockElementChange","OnAfterIBlockElement"]); | |
| AddEventHandler("main", "OnEpilog",["OnAfterIBlockElementChange","OnEpilog"]); | |
| AddEventHandler("iblock", "OnAfterIBlockElementChange","test"); | |
| function test($arFields){ | |
| //pre('OnAfterIBlockElementChange'); | |
| //pre($arFields); | |
| //logto($arFields,99); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment