Добрый день, в 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")) может как правильней решить это?