@amikha1lov

Добавление товара в корзину пользователя по условию, как сделать правильно?

Есть задача, по которой при общем весе товаров в корзине в 3кг нужно добавить товар, если вес меньше 3кг - этот товар нужно удалить. И если весь кратен 3кг, то есть 3 кг, 6кг, 9кг и т.д , то соответственно кол-во товара должно увеличиваться.

Как лучше сделать данный функционал? Через подписку на событие корзины ? Какое будет правильней ? OnBeforeBasketAdd или OnBeforeBasketUpdate ? Или можно сделать через свои правила работы с корзиной? Тогда вопрос можно ли добавить туда условие кратности, сейчас там только равно, больше, меньше и т.д
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
Вешайте обработчик на следующие события модуля sale:
OnBasketUpdate
OnBasketDelete
OnBasketAdd

Т.е. на каждое изменение состава корзины.
Так как сам обработчик тоже будет менять состав, не забудьте добавить флаг, чтобы не уйти в рекурсию. Что-то вроде:
if (self::$Bypass) return;
        self::$Bypass = true;

        // здесь ваш код

        self::$Bypass = false;


Далее вам остается получить корзину, посчитать вес товаров без учета вашего, рассчитать нужное количество вашего товара и изменить его, добавить или убрать.

Корзину бы я получал на месте, не оглядываясь на входящие параметры:
\Bitrix\Main\Loader::includeModule('sale');
        $basket = \Bitrix\Sale\Basket::loadItemsForFUser(
                \Bitrix\Sale\Fuser::getId(),
                \Bitrix\Main\Context::getCurrent()->getSite()
            );


Входящие параметры сделайте так:
public static function basketOperator ($_=0,$__=0,$___=0)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект
21 нояб. 2024, в 19:09
5000 руб./за проект