В init есть данный код. При событии OnAfterIBlockElementUpdate все передается и работает, а вот при OnAfterIBlockElementAdd данные со складов пустые
Код |
---|
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/logs/".date("d-m-Y").".txt"); AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("ElementTehno", "addSort")); class ElementTehno { //Чтобы у нас не было 504 ошибки необходимо прописать этот код, он не дает зациклится нашему скрипту public static $disableHandler = false; // Меняем сортировка и активность в зависимости от наличия на складах public function sort_price($ID, $STORE_AMOUNT_1, $STORE_AMOUNT_2, $STORE_AMOUNT_4, $DETAIL_PICTURE){ if($STORE_AMOUNT_1 == 0 and $STORE_AMOUNT_2 == 0 and $STORE_AMOUNT_4 == 0){ $arSort["SORT"] = "1500"; } elseif ($STORE_AMOUNT_1 > 0 or $STORE_AMOUNT_2 > 0){ $arSort["SORT"] = "500"; } elseif($STORE_AMOUNT_4 > 0){ $arSort["SORT"] = "1000"; } if(isset($arSort)){ $price = CPrice::GetBasePrice($ID); if($price["PRICE"] == 0){ $arSort["ACTIVE"] = 'N'; } elseif($price["PRICE"] >0 and isset($DETAIL_PICTURE)){ $arSort["ACTIVE"] = 'Y'; } return $arSort; } } function addSort(&$arFields){ if($arFields["ID"]> 0 && $arFields["IBLOCK_ID"] == "26"){ $addProps = CIBlockElement::GetList( Array("ID" => "ASC"), Array("IBLOCK_ID" => 26, "ID" => $arFields["ID"]), false, false, Array( 'ID', 'PURCHASING_CURRENCY', 'PRICE_1', 'CURRENCY_1', 'PURCHASING_PRICE', 'PROPERTY_MERLION_CODE', 'STORE_AMOUNT_1', 'STORE_AMOUNT_2', 'STORE_AMOUNT_4', 'DETAIL_PICTURE' ) ); self::$disableHandler = true; if($ar_fields = $addProps->GetNext()) { $ElementUpdate = ElementTehno::sort_price($ar_fields["ID"], $ar_fields["STORE_AMOUNT_1"], $ar_fields["STORE_AMOUNT_2"], $ar_fields["STORE_AMOUNT_4"], $ar_fields["DETAIL_PICTURE"]); if(isset($ElementUpdate)){ $ibp = new CIBlockElement(); $res = $ibp->Update($arFields["ID"], $ElementUpdate); if($res){ AddMessage2Log("При добавлении позиции ".$ar_fields["ID"]." была изменена сортировка или активность", "Tehno"); } } } } } } |