Ознакомьтесь с обновлениями продуктов, которые мы анонсировали! Смотрите, что нового.

/

Симуляция корзины для расчета скидки без добавления товара

Задача:

рассчитать и показать скидку на товар прямо в карточке товара

,

не добавляя его в корзину

, и

не выбирая способ оплаты

. Причина: скидка была задана через "Правила корзины", и срабатывала

только при выборе определённого способа оплаты

, что в момент просмотра товара ещё невозможно.

Проблемы:


Была создана "виртуальная" корзина и заказ в памяти, добавили в неё нужный товар, инициировали механизм расчета скидок, и считали финальную цену.


Пояснение по ключевым моментам


  • 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) — применяет скидки, бонусы и финализирует цену.