Симуляция корзины для расчета скидки без добавления товара
Задача:
рассчитать и показать скидку на товар прямо в карточке товара
,
не добавляя его в корзину
, и
не выбирая способ оплаты
. Причина: скидка была задана через "Правила корзины", и срабатывала
только при выборе определённого способа оплаты
, что в момент просмотра товара ещё невозможно.
Проблемы:
Была создана "виртуальная" корзина и заказ в памяти, добавили в неё нужный товар, инициировали механизм расчета скидок, и считали финальную цену.
Пояснение по ключевым моментам
- Basket::create()Basket::create() — создаёт корзину в памяти, без сохранения в БД.
- CUSTOM_PRICE => 'N'CUSTOM_PRICE => 'N' — даёт системе возможность изменить цену (применить скидку).
- ProductProviderClassProductProviderClass — нужен для корректной загрузки товарных данных.
- Order::create()Order::create() — создаёт "виртуальный" заказ, необходимый для корректной работы скидок.
- Discount::loadByBasket() + calculate()Discount::loadByBasket() + calculate() — рассчитывают доступные скидки на корзину.
- order->doFinalAction(true)order->doFinalAction(true) — применяет скидки, бонусы и финализирует цену.