Реализую всякие акции путем анализа текущих элементов в корзине. Для этого работаю с файлами /bitrix/components/bitrix/sale.basket.basket/component.php перед
и в /bitrix/modules/sale/general/sale_act.php в начале метода
Код
public static function ApplyBasketDiscount(&$arOrder, $func, $dblValue, $strUnit)
{
Все считает правильно, но только после обновления странички (корзины\ордера). То есть вопрос, куда мне засовывать обработчик элементов корзины, чтоб во время, например, изменения кол-ва товаров в корзине, или удаления, можно было проводить перекалькуляцию. Спасибо.
В любом случае способ выбран неверный, т.к. не рекомендуется вносить изменения в компоненты и тем более модули битрикса. Если вам нужно реализовать какую-то свою логику работы, то нужно создать свой компонент (можно скопировав оригинальный) и модифицировать уже его.
Если вам нужно только пересчитать стоимость товаров в корзине, то вариантов несколько: 1. Воспользоваться файлом result_modifier.php вашего шаблона компонента sale.basket.basket 2. Воспользоваться обработчиком события корзины
Рассказываю как оно должно быть по идее: - добавляется товар в корзину - после добавление пробегаемся по всем элементам корзины (например ищем 2 товара одного бренда) - если условие соблюдается, то добавляем "подарок" в корзину.
Вы предложили вариант №1, но это же только в корзине? + модификации нужно будет делать в двух местах? там подкомпоненты cart и popup? А дальше в оформлении ордера еще? Возможно у меня вариант абсолютно неправильный, но все действия происходят в одном месте,а именно (для залогиненых) в методе ApplyBasketDiscount. Поправьте меня, пожалуйста, если я снова толкую неверно..