Всем привет. Столкнулся с проблемой при решении задачи, по добавлению свойства "наличие" в умный фильтр.
Свойство создал в Фильтр засунул. Написал скрипт, в нем пробежался по товарам, посмотрел вевзде количество, учел торговики где они есть. Заполнил свойства у всех товаров, все хорошо.
Осталось только написать чтобы при изменение количества это фиксировалось в свойтсве "наличие".
Для обычных товаров все просто используя эти 2 события свойство меняется
Но событие даже не срабатывает если количество меняется не у самого товара, а у торгового предложения, сидел копал документашку и не нашол не чего по изменению количества торговых предложений, решил пойти топорно, воспользовавшись событием изменения элемента инфоблока. Сразу столкнулся с проблемой
пытаясь продебажить и прописав в функции фызываемой событием дай, страница зависал с вечной загрузкой если редактировал торговое предложение зайдя в него из интерфейса редактирования самого товара.
Это почему так кто то может подсказать? Это очень странно как по мне.
Ну да бог с ним как то догадался что если напрямую в инфоблок торговиков зайти и менять то все дебажится как надо.
Вобщем написал функцию, и все вне работает вплоть до последней основной точки. Почему то самой свойство не меняетс я не в какую, в чем причина не могу разобраться . Подскажите пожалуйста
Свойство создал в Фильтр засунул. Написал скрипт, в нем пробежался по товарам, посмотрел вевзде количество, учел торговики где они есть. Заполнил свойства у всех товаров, все хорошо.
Осталось только написать чтобы при изменение количества это фиксировалось в свойтсве "наличие".
Для обычных товаров все просто используя эти 2 события свойство меняется
Код |
---|
AddEventHandler("catalog", "OnStoreProductAdd", "DoUpdateQuantity"); AddEventHandler("catalog", "OnStoreProductUpdate", "DoUpdateQuantity"); function DoUpdateQuantity($arg,$arg2) { if(CModule::IncludeModule("sale")){ $buffer=array(); if(is_array($arg2)){ $arOrder = array(); $arFilter = array("ID"=>$arg2['PRODUCT_ID'], "IBLOCK_ID"=>5); $arSelectFields = array("ID","CATALOG_QUANTITY"); $rsElements = CIBlockElement::GetList($arOrder, $arFilter, FALSE, FALSE, $arSelectFields); while($arElement = $rsElements->GetNext()) {//print_r($arElement);die; if ($arElement["CATALOG_QUANTITY"] > 0 ){ $prop = Array("QUANTITY" => 354); // 354 - в наличии }else{ $prop = Array("QUANTITY" => 355); // 355 - под заказ } } CIBlockElement::SetPropertyValuesEx($arg2['PRODUCT_ID'], 5, $prop); } } } |
пытаясь продебажить и прописав в функции фызываемой событием дай, страница зависал с вечной загрузкой если редактировал торговое предложение зайдя в него из интерфейса редактирования самого товара.
Это почему так кто то может подсказать? Это очень странно как по мне.
Ну да бог с ним как то догадался что если напрямую в инфоблок торговиков зайти и менять то все дебажится как надо.
Вобщем написал функцию, и все вне работает вплоть до последней основной точки. Почему то самой свойство не меняетс я не в какую, в чем причина не могу разобраться . Подскажите пожалуйста
Код |
---|
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", "DoUpdateQuantitySKU"); function DoUpdateQuantitySKU(&$arFields) { if (CCatalogSKU::GetInfoByOfferIBlock($arFields["IBLOCK_ID"])){ //если это торговик $ProductId=CCatalogSku::GetProductInfo($arFields["ID"]); // узнаем ид товара //print_r($ProductId); $quantity=0; $res = CCatalogSKU::getOffersList( //получаемсписок торговиков $ProductId["ID"], // массив ID товаров $ProductId["IBLOCK_ID"], $skuFilter = array(), // дополнительный фильтр предложений. по умолчанию пуст. $fields = array(), // массив полей предложений. даже если пуст - вернет ID и IBLOCK_ID $propertyFilter = array() /*свойства предложений. имеет 2 ключа: ID - массив ID свойств предложений либо CODE - массив символьных кодов свойств предложений если указаны оба ключа, приоритет имеет ID*/ ); foreach ($res[$ProductId["ID"]] as $key => $value) { $offerParameters = CCatalogProduct::GetByID($value["ID"]); $quantity=$quantity+$offerParameters["QUANTITY"]; //сумируем остатки по торговикам } //print_r($quantity);die; if ($quantity > 0){ $prop = Array("QUANTITY" => 354); // 354 - в наличии }else{ $prop = Array("QUANTITY" => 355); // 355 - под заказ } CIBlockElement::SetPropertyValuesEx($ProductId["ID"], 5, $prop); } } |