Доброго всем.
Задача для магазина цветов организовать букеты товарами типа комплект, состоящий из простых товаров и торговых предложений (свойства: размер цветка). и пересчитывать цену комплекта при изменении цены составляющих его товаров.
За день экспериментов с АПИ родилось такое неизящное решение:
не изящно, но состав виден. артефакты и не оптимизировано. досижу доковыряю.
во фронт-энд работает.
в init.php пытался пытался вешать на событие, чтобы происходил пересчет цены комплекта при обновлении свойств продукта
но совсем не вижу реакции на обновление свойств продукта.
подскажите какое событие лучше использовать чтобы пересчет происходил не часто, но периодически и явные ошибки. свежим взглядом.
заранее спасибо.
Задача для магазина цветов организовать букеты товарами типа комплект, состоящий из простых товаров и торговых предложений (свойства: размер цветка). и пересчитывать цену комплекта при изменении цены составляющих его товаров.
За день экспериментов с АПИ родилось такое неизящное решение:
Скрытый текст |
|---|
| [CODE]<pre> <? $summ=0; CModule::IncludeModule("iblock"); $arSelect = Array("ID", "NAME"); // Указываем список параметров, которые будем использовать $arFilter = Array("IBLOCK_ID"=>2, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y"); // Указываем параметры фильтра, по которым будем выводить элементы $res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, false, $arSelect); // Вызов while($ob = $res->GetNextElement()) { $arFields = $ob->GetFields(); $arSets = CCatalogProductSet::getAllSetsByProduct($arFields["ID"], CCatalogProductSet::TYPE_SET); if (!empty($arSets)) { echo $arFields["NAME"].'<br>'; foreach($arSets as $arSet) { foreach($arSet["ITEMS"] as $arSetItem) { $arr_price = CPrice::GetBasePrice($arSetItem["ITEM_ID"]); $resz = CIBlockElement::GetByID($arSetItem["ITEM_ID"]); if($ar_res = $resz->GetNext()) { $summ=$summ+($arSetItem['QUANTITY']*$arr_price['PRICE']); echo $ar_res['NAME'].' - '.$arSetItem['QUANTITY'].'шт по '.$arr_price['PRICE'].'руб.<br>'; } } } echo 'Итого '.$summ.'руб'; //=================== дальше пытаюсь обновить цену комплекта. $arFie = Array( "PRODUCT_ID" => $arFields["ID"], "CATALOG_GROUP_ID" => 1, "PRICE" => $summ, "CURRENCY" => "RUB", "QUANTITY_FROM" => false, "QUANTITY_TO" => false ); $summ=0; $rest = CPrice::GetList( array(), array( "PRODUCT_ID" => $arFields["ID"], "CATALOG_GROUP_ID" => 1 ) ); if ($arr = $rest->Fetch()) { CPrice::Update($arr["ID"], $arFie); } else { CPrice::Add($arFie); } //=================== } } ?> </pre> [/CODE] |
не изящно, но состав виден. артефакты и не оптимизировано. досижу доковыряю.
во фронт-энд работает.
в init.php пытался пытался вешать на событие, чтобы происходил пересчет цены комплекта при обновлении свойств продукта
Скрытый текст |
|---|
| [CODE]AddEventHandler("main", "OnProductUpdate", "_OnProductUpdate"); AddEventHandler("main", "OnProductAdd", "_OnProductUpdate"); function _OnProductUpdate() {....... } [/CODE] |
но совсем не вижу реакции на обновление свойств продукта.
подскажите какое событие лучше использовать чтобы пересчет происходил не часто, но периодически и явные ошибки. свежим взглядом.
заранее спасибо.