Skip to main content
Следите за суммой корзины и синхронизируйте с ней бесплатный подарок: добавьте подарок, когда покупатель превысит порог расходов, и удалите его, если сумма снова опустится ниже.
Для настраиваемой мерчантом версии с уровнями, правилами по рынкам и прогресс-баром используйте блок Rewards — без кода. Этот вариант нужен, когда ваше правило не выражается блоком.

Фрагмент кода

Вставьте в Cart settings → Custom script → Initialization и задайте две константы:

Как это работает

reconcileGift описывает состояние, в котором корзина должна находиться, а затем вносит не более одного изменения, чтобы достичь его:
  • Условие выполнено, а подарка нет → addItem добавляет его.
  • Условие не выполнено, а подарок есть → removeItem удаляет его по key строки.
  • Иначе → ничего не делать.
Функция выполняется и на cart_loaded (чтобы корзина, уже соответствующая условию при загрузке страницы, получила подарок), и на cart_updated (чтобы реагировать на каждое последующее изменение). Поскольку cart_loaded воспроизводится для поздних подписчиков, это работает независимо от того, когда запускается ваш скрипт.
Проверки !gift / gift — именно то, что предотвращает зацикливание. Добавление подарка вызывает cart_updated, которое снова запускает reconcileGift, и второй проход обнаруживает, что подарок уже есть, поэтому ничего не делает. Уберите проверки — и получите бесконечный цикл. См. два правила.
Обратите внимание, что добавление подарка увеличивает сумму корзины, поэтому порог, близкий к цене товара, может колебаться: добавление подарка за $0 безопасно, но подарок с ценой сам по себе может поднять корзину выше порога. Делайте подарок бесплатным или сравнивайте с суммой, которая его исключает.

Адаптация

Условие по количеству товаров вместо суммы:
Условие по наличию конкретного товара в корзине:
Только в определённых странах. Читайте context, доступный до загрузки корзины:
Исключите подарок из порога, чтобы он не мог сам себя удерживать:
Пометьте подарок, чтобы он читался как подарок. Line transform может изменить заголовок строки, заголовок варианта, состояние скрытия и внутренние свойства — переименуйте его:
Line transform не может скрыть элементы управления количеством строки — его единственные сеттеры: setTitle, setVariantTitle, setHidden и setInternalProperties. Если покупатель изменит количество подарка, корректируйте его из обработчика cart_updated.

Что дальше