Добрый день, друзья!
Я реализовал по своему - работает. Но только сейчас увидел ваш код. И мой код хорошо присваивает значения ID скидки в свойства товара. Но CCatalogDiscount::GetDiscountByProduct не находит правило работы с корзиной если это не скидка, а подарок к товару. Как быть в этой ситуации?
На всякий случай вот мой код:
Код |
---|
if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")){
$rs = CIBlockElement::GetList(array("PROPERTY_BX_FAN_DISCOUNT" => "asc","PROPERTY_CML2_LINK" => "asc"),array("ACTIVE" => "Y", "CATALOG_AVAILABLE" => "Y"));
$arTovaru = array();
while($arItem = $rs->Fetch()){
if(empty($arItem["PROPERTY_CML2_LINK_VALUE"])){
$mainID = $arItem["ID"];
$arTovaru[$mainID]["PROPERTY_BX_FAN_DISCOUNT_VALUE"] = $arItem["PROPERTY_BX_FAN_DISCOUNT_VALUE"];
}else{
$mainID = $arItem["PROPERTY_CML2_LINK_VALUE"];
$arTovaru[$mainID]["PROPERTY_BX_FAN_DISCOUNT_VALUE"] = '';
}
$arDiscounts = CCatalogDiscount::GetDiscountByProduct($arItem["ID"],array(),"N",2,SITE_ID);
$arSkuIds = array();
foreach($arDiscounts as $arDiscount){
$arSkuIds[$arDiscount["ID"]] = $arDiscount["ID"];
$arTovaru[$mainID]["DISCOUNTS"][$arDiscount["ID"]] = $arDiscount["ID"];
}
// Это предложение, для него обновим скидку
if(!empty($arItem["PROPERTY_CML2_LINK_VALUE"])){
if(empty($arSkuIds)){
if($arItem["PROPERTY_BX_FAN_DISCOUNT_VALUE"]) CIBlockElement::SetPropertyValuesEx($arItem["ID"], 46, false);
}else{
CIBlockElement::SetPropertyValuesEx($arItem["ID"], 46, array("BX_FAN_DISCOUNT" => $arSkuIds));
}
}
}
foreach($arTovaru as $key=>$arIt){
if(empty($arIt["DISCOUNTS"])){
if($arIt["PROPERTY_BX_FAN_DISCOUNT_VALUE"]) CIBlockElement::SetPropertyValuesEx($key, 28, false);
}else{
CIBlockElement::SetPropertyValuesEx($key, 28, array("BX_FAN_DISCOUNT" => $arIt["DISCOUNTS"]));
}
}
|