Добрый день, в init.php внес следующий код:
Но при выполнении полного обмена обновляются только несколько позиций, остальные не срабатывает, в чем может быть проблема?
При этом каталог обновляется полностью, т.е. изменения в элементах происходят, а вод код не срабатывает, грешу на условие if(CModule::IncludeModule("catalog")) может как правильней решить это?
Код |
---|
<?php require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/include.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/subscribe/prolog.php"); AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("AvalibleChanger", "OnAfterIBlockElementUpdateHandler")); AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("AvalibleChanger", "OnAfterIBlockElementUpdateHandler")); class AvalibleChanger { public static $disableHandler = false; function OnAfterIBlockElementUpdateHandler(&$arFields) { if (self::$disableHandler) return; CModule::IncludeModule("iblock"); $data = $arFields; //Наличие //$arFields['PROPERTY_VALUES'][133][0] if(CModule::IncludeModule("catalog")) { $ar_res = CCatalogProduct::GetByIDEx($arFields["ID"], true); //Установка свойства "Наличие" (Возможные варианты: В наличии, Под заказ, Нет в наличи) if($ar_res['PRODUCT']['QUANTITY'] > 0 ) { //В наличии (если количество больше 0) CIBlockElement::SetPropertyValues($arFields['ID'], $arFields['IBLOCK_ID'], 569, 'availability'); } elseif($ar_res['PROPERTIES']['DOSTUPEN_POD_ZAKAZ']['VALUE_XML_ID'] == true) //&& $ar_res['PRODUCT']['QUANTITY'] = 0 { //Под заказ (если количество 0, но свойство 'DOSTUPEN_POD_ZAKAZ' == true) CIBlockElement::SetPropertyValues($arFields['ID'], $arFields['IBLOCK_ID'], 570, 'availability'); } else { //Нет в наличи (в остальных случаях) CIBlockElement::SetPropertyValues($arFields['ID'], $arFields['IBLOCK_ID'], 571, 'availability'); } } if($arFields["RESULT"]) AddMessage2Log("Запись с кодом ".$arFields["ID"]." изменена."); else AddMessage2Log("Ошибка изменения записи ".$arFields["ID"]." (".$arFields["RESULT_MESSAGE"].")."); self::$disableHandler = true; } } |
Но при выполнении полного обмена обновляются только несколько позиций, остальные не срабатывает, в чем может быть проблема?
При этом каталог обновляется полностью, т.е. изменения в элементах происходят, а вод код не срабатывает, грешу на условие if(CModule::IncludeModule("catalog")) может как правильней решить это?