Skip to content

Instantly share code, notes, and snippets.

@EscApp2
Created September 29, 2025 08:43
Show Gist options
  • Select an option

  • Save EscApp2/b45e923c3dab561479e93e6f6e6db488 to your computer and use it in GitHub Desktop.

Select an option

Save EscApp2/b45e923c3dab561479e93e6f6e6db488 to your computer and use it in GitHub Desktop.
OnAfterIBlockElementChange
<?
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