PS PrestaShop Intermediate

Fortune Wheel & Exit-Intent Popup — Complete Guide

Install, configure and run the fortune-wheel exit-intent popup: segments and weighting, server-side draw, unique coupons as cart rules, lead capture with CSV export, desktop/mobile triggering and GDPR for PrestaShop 8 and 9.

Updated Module version 1.0.0

Overview

The Fortune Wheel & Exit-Intent Popup intercepts visitors at the exact moment they are about to leave your shop and offers them a game: they enter their email, spin the wheel and leave with a coupon. You turn a silent abandonment into a qualified lead and, often, an immediate order.

The key characteristic of the module is that the winning prize is determined server-side via a weighted draw. Probabilities never reach the browser: the wheel merely animates a result that was already decided in PHP, which makes client-side rigging impossible.

The module is compatible with PrestaShop 8.0 to 9.x, with no Composer or external dependency. All texts are customizable and multilingual.

Installation

  1. In the back office, open Modules > Module Manager.
  2. Click Upload a module and select the dfexitwheel.zip file.
  3. Installation automatically creates three tables (segments, leads, configuration), six default segments and two admin tabs.
  4. The module is active immediately with functional default values.

No setting is required to get started: the wheel works right after installation. You can then fine-tune the segments, texts and triggers.

General configuration

From the module configuration page (Configure), you set:

  • Enable the module: master switch.
  • Title, subtitle, email placeholder, button text: all popup labels, per language.
  • Consent text (GDPR): the sentence shown next to the mandatory consent checkbox.
  • Win / lose message: what is shown after the draw.
  • Primary color: the accent color of the popup and the wheel.
  • Eligibility delay: minimum time spent on the site before the popup can trigger.
  • Frequency (days): how long a visitor won’t see the popup again.
  • Show to logged-in customers, Enable on mobile, Mobile timer.
  • Default coupon validity, One play per email, Subscribe to newsletter.

Text fields are multilingual: use the language selector on each field to enter a version per shop language.

Managing wheel segments

The Wheel segments screen lists the displayed slices. For each one you define:

  • Label: the text printed on the slice (e.g. “-10%”, “Free shipping”, “Bad luck!”).
  • Color: the background color of the slice.
  • Prize type: percentage discount, fixed-amount discount, free shipping, or none (losing).
  • Value: the percentage or amount depending on the type.
  • Weight: the relative probability of landing on this segment. A high weight = frequent segment.
  • Minimum amount: minimum cart required for the coupon to apply.
  • Code prefix and validity (days) specific to the segment.
  • Position and active.

How weighting works

The draw sums the weights of all active segments and then selects a segment proportionally to its weight. Example: with weights 25, 30, 20, 15, 8 and 2, the segment with weight 2 (the top prize) comes up roughly 2 times out of 100. You keep full control over how generous the wheel is.

For a profitable wheel, keep one or two “losing” or low-discount segments with a high weight, and reserve large discounts for low weights.

Coupons and cart rules

On every win, the module creates a genuinely unique PrestaShop cart rule (CartRule):

  • A single total use and one per customer.
  • An expiry date computed from the segment validity (or the default validity).
  • An optional minimum amount.
  • A unique code generated for each winner.

Three reward types are possible: percentage, fixed amount and free shipping. The code is shown to the winner with a copy button and a pre-filled link back to the shop.

Because each code is personal and single-use, it cannot be shared or resold on deal sites, unlike a generic code.

Collected leads and CSV export

The Collected leads screen records every play: email, segment obtained, coupon code, consent, date, language and shop. The list is read-only and offers a CSV export to feed your emailing tool.

If the Subscribe to newsletter option is on, the email is also added to PrestaShop’s native subscribers (newsletter subscription table) when consent is given.

Desktop and mobile triggering

On desktop, the popup triggers via exit-intent detection: when the cursor moves quickly up toward the browser tab bar.

On mobile, that event does not exist. The module then automatically switches to a configurable timer and to the detection of a fast upward scroll.

Guardrails avoid any insistence: a frequency cap (the popup doesn’t reappear for X days), an eligibility delay before the first possible trigger, and a permanent stop after a win.

GDPR compliance

  • Email capture requires an explicit consent checkbox with text you customize.
  • Newsletter sign-up is optional and tied to the same consent.
  • Leads can be viewed and exported, which makes access and deletion requests easier.

Technical compatibility

  • PrestaShop: 8.0 to 9.x.
  • Hooks: actionFrontControllerSetMedia (loading front assets and configuration) and displayFooter (rendering the popup).
  • Multistore and multilingual supported.
  • Coupons: native cart rules, with no parallel table.
  • No Composer dependency.

FAQ

Can a customer rig the wheel?

No. The winning segment is computed server-side before the animation. The browser only receives the result index and never knows the weights.

What kinds of prizes can I hand out?

Percentage discount, fixed-amount discount, free shipping, or a losing segment. Each win creates a unique cart rule.

Is it PrestaShop 9 compatible?

Yes, the module is built for PrestaShop 8.0 through 9.x with no adaptation.

Troubleshooting

  • The popup doesn’t show: check that the module is enabled, that the eligibility delay has elapsed and that you haven’t already played (clear the browser local storage to test again).
  • The popup doesn’t reappear: this is intentional after a win or during the frequency window. Reset local storage to force a new display.
  • The coupon doesn’t apply: check the segment’s minimum amount and the expiry date.
  • Text fields look empty in configuration: make sure you use the latest module version (the multilingual field display was fixed in 1.0.0).
Was this page helpful?

Still stuck? Contact support