Smart Dynamic & Scheduled Discounts – Documentation

Smart Dynamic & Scheduled Discounts lets you schedule timed product discounts from the PrestaShop Back Office and show matching campaign messages on product pages, listings, prices, and the cart. It helps you run flash sales, fixed-date offers, and store-wide promotions without manually changing product prices at the start and end of each sale.

Features

  • Scheduled campaign manager. Create, edit, duplicate, bulk enable, bulk disable, and delete campaigns from Scheduled Discounts → Campaigns.
  • Automatic price calculation. The module hooks into actionProductPriceCalculation and reduces the calculated product price while a matching campaign is active.
  • Multiple discount types. Campaigns can apply a percentage discount, a fixed amount discount, or a fixed target price.
  • Product targeting. Target specific products, categories, or manufacturers with the built-in entity selector; an empty scope applies the campaign to all products in the current shop.
  • Timed campaign windows. Each campaign has a start date, end date, active switch, and status tracking for inactive, scheduled, active, or expired campaigns.
  • Front-office campaign display. Show a campaign badge and countdown on product pages through displayProductAdditionalInfo.
  • Listing badges. Show campaign badges in product lists through displayProductListReviews.
  • Savings label. Show a “Save X%” label after the product price through displayProductPriceBlock.
  • Cart campaign block. Show active campaign reminders in the cart footer through displayShoppingCartFooter.
  • Countdown styles. Choose simple, flip, or circle countdown rendering for campaign timers.
  • Usage tracking. When an order is validated, the module records campaign usage, product, customer, order, and discount value.
  • Dashboard reporting. The dashboard shows active, scheduled, expired, and total campaigns, total discount given, orders with discounts, recent 30-day usage, and upcoming campaigns.
Smart Dynamic & Scheduled Discounts, Admin discount campaigns Smart Dynamic & Scheduled Discounts, Admin campaign list

Configuration options

  • Enable Module. Master switch for campaign pricing and front-office campaign output; default: 1. Set it in Scheduled Discounts → Configuration → General Settings.
  • Respect Stock. Stores whether discounts should be hidden for out-of-stock products; default: 1. Set it in Scheduled Discounts → Configuration → General Settings.
  • Show Countdown Timer. Global default stored for countdown visibility; default: 1. Set it in Scheduled Discounts → Configuration → Display Settings.
  • Default Countdown Style. Global default stored for countdown style; default: simple. Available values are simple, flip, and circle.
  • Show Campaign Badge. Global default stored for badge visibility; default: 1. Set it in Scheduled Discounts → Configuration → Display Settings.
  • Default Badge Color. Global badge background color; default: #ff0000.
  • Default Badge Text Color. Global badge text color; default: #ffffff.
  • Show Original Price. Stores whether the crossed-out original price should be shown; default: 1.
  • Show Savings. Controls whether the savings label can be displayed after product prices; default: 1.
  • Price Display Mode. Stores the preferred display mode for discounted prices; default: replace. Available values are replace and overlay.
  • Combine Discounts. Stores whether campaign discounts may combine with other discounts; default: 0.
  • Priority Over Specific Prices. Stores whether campaign discounts should take priority over PrestaShop specific prices; default: 0.
  • Show Urgency Indicator. Stores whether ending-soon urgency messaging should be enabled; default: 1.
  • Urgency Threshold (hours). Stores the remaining-time threshold for urgency messaging; default: 24.
  • Campaign Name. Internal campaign name shown in the campaign list and product-page campaign block; default: empty.
  • Description. Back-office campaign description; default: empty.
  • Campaign Type. Campaign label/type used for organization and fallback badge text; default: scheduled. Available values are flash_sale, scheduled, recurring, countdown, early_bird, and last_chance.
  • Priority. Stored campaign priority and list query order; default: 0.
  • Active. Enables or pauses a campaign without deleting it; default: 1.
  • Discount Type. Defines how the discount is calculated; default: percent. Available values are percent, amount, and fixed_price.
  • Discount Value. Discount number used by the selected discount type; default: 0.
  • Stackable. Stores whether the campaign may combine with other discounts; default: 0.
  • Target Products. Selects products, categories, or manufacturers for the campaign; default: empty, meaning all products.
  • Start Date. First date and time when the campaign can apply; default: required value set by the merchant.
  • End Date. Last date and time when the campaign can apply; default: required value set by the merchant.
  • Show Countdown Timer. Per-campaign countdown visibility; default: 1.
  • Countdown Style. Per-campaign countdown style; default: simple.
  • Show Badge. Per-campaign badge visibility; default: 1.
  • Badge Text. Custom per-campaign badge text; default: empty, which displays the campaign type.
  • Badge Color. Per-campaign badge background color; default: #ff0000.
  • Badge Text Color. Per-campaign badge text color; default: #ffffff.
  • Show Original Price. Per-campaign display preference for the original price; default: 1.
  • Show Savings. Per-campaign savings-label visibility; default: 1.
  • Custom CSS. Per-campaign CSS field stored with the campaign display settings; default: empty.
  • Max Total Uses. Maximum recorded campaign uses across all customers; default: 0, meaning unlimited.
  • Max Uses Per Customer. Maximum recorded campaign uses for one customer; default: 0, meaning unlimited.
Smart Dynamic & Scheduled Discounts, Admin campaign targeting Smart Dynamic & Scheduled Discounts, Admin campaign targeting

Customization examples

Example campaign values for a Black Friday product promotion:

campaign_type = flash_sale
discount_type = percent
discount_value = 15
date_start = 2026-11-27 00:00:00
date_end = 2026-11-30 23:59:59
display_show_countdown = 1
display_countdown_style = flip
display_show_badge = 1
display_badge_text = Black Friday
display_badge_color = #111111
display_badge_text_color = #ffffff
max_uses_total = 0
max_uses_per_customer = 1

Example fixed-price campaign:

campaign_type = scheduled
discount_type = fixed_price
discount_value = 49.99
display_badge_text = Special price

Theme CSS can target the front-office classes loaded by views/css/front/campaigns.css:

.mprdsd-badge[data-mprdsd-type="flash_sale"] {
    background: #111111 !important;
    color: #ffffff !important;
}

.mprdsd-countdown--flip .mprdsd-countdown__value {
    background: #111111;
    border-radius: 2px;
}

.mprdsd-price__savings-inline {
    background: #e8f5e9;
    color: #2e7d32;
}

.mprdsd-cart-campaign {
    border-color: #111111;
}

Template override path for changing the listing badge markup:

{* themes/your_theme/modules/mprdynamicscheduleddiscounts/views/templates/hook/campaign-badge.tpl *}
{if isset($mprdsd_campaign) && $mprdsd_campaign && isset($mprdsd_display)}
    <span class="mprdsd-badge"
          data-mprdsd-type="{$mprdsd_campaign->campaign_type}"
          style="background:{$mprdsd_display.badge_color|default:'#ff0000'};color:{$mprdsd_display.badge_text_color|default:'#ffffff'}">
        {if isset($mprdsd_display.badge_text) && $mprdsd_display.badge_text}
            {$mprdsd_display.badge_text}
        {else}
            {$mprdsd_campaign->campaign_type|replace:'_':' '|capitalize}
        {/if}
    </span>
{/if}

Front controller endpoints available for custom theme JavaScript:

/module/mprdynamicscheduleddiscounts/ajax?action=getActiveCampaigns
/module/mprdynamicscheduleddiscounts/ajax?action=getProductCampaigns&id_product=123&id_product_attribute=0
/module/mprdynamicscheduleddiscounts/ajax?action=getCampaign&id_campaign=4
Smart Dynamic & Scheduled Discounts, Product campaign countdown Smart Dynamic & Scheduled Discounts, Admin dashboard overview

Installation

  1. In your PrestaShop Back Office, go to Modules → Module Manager.
  2. Click Upload a module.
  3. Select the module ZIP file and wait for PrestaShop to install it.
  4. Open Configure or go to Scheduled Discounts → Configuration.
  5. Confirm that Enable Module is turned on.
  6. Go to Scheduled Discounts → Campaigns and create your first campaign.
Smart Dynamic & Scheduled Discounts, Listing campaign badges Smart Dynamic & Scheduled Discounts, Admin display settings

How it works

Campaigns are managed from the Back Office under Scheduled Discounts. You create a campaign, choose its discount type and value, set its start and end dates, choose the products it applies to, and decide which front-office elements should be visible.

When PrestaShop calculates a product price, the module checks active campaigns for the current shop, verifies the date window and product scope, checks usage limits, and applies the campaign that gives the largest discount. Shoppers then see the discounted price during the campaign window, plus the optional badge, countdown, savings label, and cart reminder.

The dashboard helps you monitor what is running now, what is scheduled next, how much discount value has been given, and which campaigns were recorded on validated orders.

Smart Dynamic & Scheduled Discounts, Product campaign savings Smart Dynamic & Scheduled Discounts, Admin integrity checks

Honest limits

  • The module does not permanently rewrite product base prices; discounts are applied during PrestaShop price calculation.
  • If several campaigns match one product, current pricing uses the campaign that gives the largest discount, not the stored priority value.
  • Some stored behavior/display preferences are present in the Back Office before all front-office rendering paths use them fully, including original-price display, custom CSS injection, discount stacking, urgency messaging, and priority over specific prices.
  • Customer-group targeting and recurring schedule tables exist in the model layer, but the current campaign form focuses on products, categories, manufacturers, dates, display, and limits.
  • Usage reporting starts when orders are validated, so campaigns can discount products before there is any dashboard usage data.
  • Theme hook placement depends on the active PrestaShop theme; if a theme does not render a hook, the matching badge, countdown, savings label, or cart block may need a template adjustment.
Smart Dynamic & Scheduled Discounts, Cart campaign summary

Frequently Asked Questions

Can I schedule a campaign in advance?
Yes. Create the campaign, set the start and end date/time, and leave it active. The discount applies only during the configured date window.

What happens if several campaigns match the same product?
The module checks all matching active campaigns and applies the one that gives the largest discount.

Can I target a whole category?
Yes. Campaign scope supports products, categories, and manufacturers. If no scope is selected, the campaign applies to all products in the current shop.

Can I show a countdown timer on product pages?
Yes. Enable Show Countdown Timer in the campaign display settings and choose simple, flip, or circle.

Can I customize the badge text?
Yes. Set Badge Text in the campaign display settings. If you leave it empty, the module uses the campaign type as the badge label.

Does the module track campaign usage?
Yes. When an order is validated, the module records campaign usage per product and stores the discount value applied. The dashboard uses this data for campaign performance and total discount reporting.

Can I temporarily pause a campaign?
Yes. Turn off the campaign's Active switch. The campaign remains saved and can be enabled again later.

Compatibility: PrestaShop 1.6 to 9.0 (latest), PHP 7.1+. We continue to support upcoming PrestaShop versions.

Smart Dynamic & Scheduled Discounts, Admin campaign discount editor
Loading...
Back to top