Добрый вечер!
Я создал у инфоблока с торговыми предложениями новое свойство. поставил в виде чекбокса.
Суть такая, чтобы в пределах одного ТП может стоять только один чекбокс. Когда я хочу переставить чекбокс в другое ТП, на первом торговом предложении он должен сбрасываться.
Собственно это получилось сделать. вот код:
Но проблема в том, что чекбокс сбрасывается(у торгового предложения, которое главное) когда например я у какого-нибудь торгового предложения(которое не является главным, у которого статус 0) меняю какое-либо свойство - количество, символьный код и т.д. Как мне избежать этого? Заранее благодарен
Я создал у инфоблока с торговыми предложениями новое свойство. поставил в виде чекбокса.
Суть такая, чтобы в пределах одного ТП может стоять только один чекбокс. Когда я хочу переставить чекбокс в другое ТП, на первом торговом предложении он должен сбрасываться.
Собственно это получилось сделать. вот код:
Код |
---|
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", array("mainTP", "setMainTP")); AddEventHandler("iblock", "OnBeforeIBlockElementAdd", array("mainTP", "setMainTP")); class mainTP { //создаем обработчик события function setMainTP(&$arFields) { //если только инфоблок 14(торговые предложения) if ($arFields['IBLOCK_ID'] == 14) { $mainProduct = CCatalogSku::GetProductInfo( $arFields['ID'], $arFields['IBLOCK_ID'] ); // $mainProduct['ID'] - это ID товара, $mainProduct['OFFER_IBLOCK_ID'] - это ID инфолока $status = 1; //статус Главного торгового предложения. 1 = Да, 0 = Нет $arFilter = array( 'IBLOCK_ID' => $mainProduct['OFFER_IBLOCK_ID'], 'PROPERTY_' . $mainProduct['SKU_PROPERTY_ID'] => $mainProduct['ID'], 'PROPERTY_GLAVNOE_TP' => $status ); // Выберем перечень полей, которые нам необходиимы $arSelect = array( 'ID', ); //получим список торговых предложений с учетом фильтра внутри товара $rsOffers = CIBlockElement::GetList( array(), //сортировка $arFilter, //фильтр данных false, //группировка данных false, //постраничная навигация $arSelect //необходимые поля ); $offer = ''; while ($arOffer = $rsOffers->GetNext()) { $offer = $arOffer['ID']; } $newStatus = 0; //новый статус //с помощью метода SetPropertyValuesEx установим новый статус у свойства GLAVNOE_TP в найденом ранее торговом предложении CIBlockElement::SetPropertyValuesEx( $offer, $mainProduct['OFFER_IBLOCK_ID'], array( "GLAVNOE_TP" => array( "VALUE" => $newStatus ) ) ); } } } |