Добрый вечер!
Я создал у инфоблока с торговыми предложениями новое свойство. поставил в виде чекбокса.
Суть такая, чтобы в пределах одного ТП может стоять только один чекбокс. Когда я хочу переставить чекбокс в другое ТП, на первом торговом предложении он должен сбрасываться.
Собственно это получилось сделать. вот код:
Но проблема в том, что чекбокс сбрасывается(у торгового предложения, которое главное) когда например я у какого-нибудь торгового предложения(которое не является главным, у которого статус 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
)
)
);
}
}
} |