Значит так, товарищи. Есть акция "каждый второй товар по бренду - скидка 50%". Как ее реализовать средствами движка - понятия не имею. Извините, если кого обижу, но меня просто отворачивает от структуры фреймворка Битрикс. Но да не будем рассыпать много лирики. Есть код, где происходит калькуляция:
Скрытый текст |
|---|
[CODE] public static function ApplyBasketDiscount(&$arOrder, $func, $dblValue, $strUnit) { if (array_key_exists('BASKET_ITEMS', $arOrder) && !empty($arOrder['BASKET_ITEMS']) && is_array($arOrder['BASKET_ITEMS'])) { $arDiscountBasket = (is_callable($func) ? array_filter($arOrder['BASKET_ITEMS'], $func) : $arOrder['BASKET_ITEMS']); if (!empty($arDiscountBasket)) { $arClearBasket = array_filter($arDiscountBasket, 'CSaleDiscountActionApply::ClearBasket'); if (!empty($arClearBasket)) { $dblValue = doubleval($dblValue); if ('S' == $strUnit) { $dblSumm = 0.0; foreach ($arClearBasket as &$arOneRow) { $dblSumm += doubleval($arOneRow['PRICE'])*doubleval($arOneRow['QUANTITY']); } if (isset($arOneRow)) unset($arOneRow); if ($dblSumm > 0) { $dblValue = ($dblValue*100)/$dblSumm; } else { $dblValue = 0.0; } $strUnit = 'P'; } if (0 != $dblValue) { foreach ($arClearBasket as $key => $arOneRow) { $dblCurValue = $dblValue; if ('P' == $strUnit) { $dblCurValue = $arOneRow['PRICE']*($dblValue/100); } $dblResult = $arOneRow['PRICE'] + $dblCurValue; if (0 <= $dblResult) { $arOneRow['PRICE'] = $dblResult; if (array_key_exists('PRICE_DEFAULT', $arOneRow)) $arOneRow['PRICE_DEFAULT'] = $dblResult; if (array_key_exists('DISCOUNT_PRICE', $arOneRow)) { $arOneRow['DISCOUNT_PRICE'] = doubleval($arOneRow['DISCOUNT_PRICE']); $arOneRow['DISCOUNT_PRICE'] -= $dblCurValue; } else { $arOneRow['DISCOUNT_PRICE'] = -$dblCurValue; } if (0 > $arOneRow['DISCOUNT_PRICE']) $arOneRow['DISCOUNT_PRICE'] = 0; if (array_key_exists('VAT_RATE', $arOneRow)) { $dblVatRate = doubleval($arOneRow["VAT_RATE"]); if (0 < $dblVatRate) $arOneRow["VAT_VALUE"] = (($arOneRow["PRICE"] / ($dblVatRate + 1)) * $dblVatRate); } $arOrder['BASKET_ITEMS'][$key] = $arOneRow; } } } } } } } } [/CODE] |
Вот на этом моменте начинается перерасчет цены:
[CODE]$dblCurValue = $dblValue;
if ('P' == $strUnit)[/CODE]Вот я и решил, что заменив $dblValue на нужно мне в тот момент, у меня заработает скидка как нужно. После перерасчета я возвращаю исходное значение в $dblValue. Но почему-то скидка считается на нужных товарах только в корзине. На остальных мне нужно скидку в 0%, а битрикс считает в неизвестном порядке скидку на оставшиеся товары от 0% до 3%. Куда копать?