Сделать оверрайд для функции getContextualValue() из CartRules.php
Т.е. скопировать оригинальный CartRules.php в /override/classes/, затем заменить
Код:
class CartRuleCore extends ObjectModel
на
Код:
class CartRule extends CartRuleCore
и стереть все функции кроме
Потом найти в коде строку комментария // Discount (%) on the whole order
Несколькими строками ниже будет строка
Код:
$reduction_value += $order_total * $this->reduction_percent / 100;
В ней вычисляется сумма скидки. Из $order_total надо вычесть скидочные товары перед вычислением скидки. Для этого
ПЕРЕД этой строкой вставьте цикл
Код:
foreach ($package_products as $product) {
if($product['on_sale']) {
$order_total -= ($use_tax ? $product['total_wt'] : $product['total']);
}
}
Потом удалить файл /cache/class_index.php и протестировать применение скидки.
P.S. Это способ для товаров, у которых есть отметка "Показывать иконку Распродажа". Если же скидки реализуете через специальные цены и не используете параметр on_sale, то надо делать немного по-другому.