PrestaShop Marketing & Promotions

Product Packs & Bundles Module for PrestaShop 8 & 9: Discounted Bundles & Kits

Packs built from real products, with real order lines and real stock.

The pack is a virtual entity: no duplicated product, no parallel stock. You compose the bundle from your catalog, pick one of four pricing modes, and the module handles the rest: a dedicated pack page with a clean URL, a "this product is available in a pack" block on every component's page, a savings badge, and a cart where every pack item stays a real line invoiced at its pack price. Invoices, credit slips, ERP exports and stock decrements work like any other order.

At a glance
  • 4 pricing modes: no discount, global percentage, per product discount, fixed pack price
  • Every component stays a real order line: invoices, stock, credit slips and ERP work natively
  • Cross-sell block "this product is available in a pack" on every component page
  • Combinations chosen by the customer or locked, optional products, editable quantities
  • PrestaShop 8.0 to 9.x, multistore, five languages, no override
PrestaShop 8.0 to 9.x 4 pricing modes Real order lines Multistore No override
  • 30-day refund
  • 12 months updates
  • 24h support
www.datafirefly.com/en/
Product Packs & Bundles Module for PrestaShop 8 & 9: Discounted Bundles & Kits
v1.1.1 · updated 2026-08-14
What it does

The short version.

01

No ghost product

The pack does not exist as a native product: no duplicated stock, no extra sheet to maintain. Components keep their price, VAT rate and stock.

02

Four pricing modes

No discount, global percentage discount, per product discount as a percentage or an amount, or a fixed pack price spread proportionally across the lines.

03

The pack sells on product pages

Every component displays a "this product is also available in a pack" block with thumbnails, crossed out price, pack price and savings badge. Position and sorting are configurable.

04

Dedicated pack page

Clean URL like /pack/12-winter-box, combination selectors, removable optional products, editable quantities and live price recalculation.

05

An honest cart

The pack price only covers pack quantities. If the customer adds extra units, they pay the regular price through a weighted average unit price, with no blocking.

06

Pack badge in the cart

Every pack line shows the pack name with a button removing the whole pack. Strict mode automatically removes the whole bundle when a component is deleted.

The long version

Everything you'd want to know before you install.

A detailed look at how Product Packs & Bundles Module for PrestaShop 8 & 9: Discounted Bundles & Kits works, why we built it the way we did, and the thinking behind the features above.

§ 01

Why not a native pack product

The native PrestaShop pack creates a separate product with its own stock and a single order line. The result: the pack stock does not follow the components, the invoice does not detail the items, and your accounting or ERP exports see a product that does not exist in your master data. This module does the opposite: the pack is a commercial definition, the products stay yours. You compose, it assembles.

§ 02

Four ways to set the price

No discount, for a pure convenience bundle. A global percentage discount applied to every component. A per product discount, as a percentage or an amount, which lets you give one item away at 100 percent in a machine plus free consumable deal. A fixed pack price, the most persuasive mode: you announce a round 49, the module spreads the gap proportionally across each line, which stays accurate even when components carry different VAT rates.

§ 03

The pack sells where the customer hesitates

The pack page has its own URL, but most sales start from product pages. Every component displays a "this product is also available in a pack" block: item thumbnails, crossed out total, pack price, savings badge and a direct add button. You pick the position (under the buy block, at the bottom of the page, or both), how many packs to show and their sorting.

§ 04

Combinations, options and quantities

Per component, you decide whether the customer picks the combination (size, color) or whether it is locked. A component can be optional: the customer unticks it and the price recalculates live. Quantities can be opened to editing, component by component. Pack availability is computed from real stock: the pack is sellable when every required component is available in the requested quantity.

§ 05

What happens in the cart

On add, every component becomes a real cart line invoiced at its pack price through a specific price scoped to that cart. Every pack line carries a badge with the pack name, a link to its page and a button removing the whole pack. Strict mode goes further: if the customer deletes one component, the whole bundle and its discount are removed, which prevents keeping the discount while returning half the pack.

§ 06

The pack price does not leak

If the customer raises the quantity of a pack product, only the pack units keep the reduced price. The module recomputes a weighted average unit price: pack quantity at the pack price, surplus at the regular price. On a 2 unit pack at 8 against a regular price of 10, moving the line to 5 units totals 46, not 40. The customer buys freely, the discount stays capped at what you decided.

§ 07

Clean orders all the way to accounting

Every pack product lands on its own order line, at its pack price. Invoices, delivery slips, credit slips and partial returns work natively, item by item. The back office shows a pack summary in every order detail, and a per pack sales counter tells you what works. Your ERP and accounting exports only ever see real references from your catalog.

§ 08

Technical integration

The product page block uses displayProductAdditionalInfo and displayFooterProduct, the cart badge uses displayCartExtraProductActions, bundle consistency uses actionCartSave. The pack page uses a dedicated route like /pack/12-winter-box. Front JavaScript is vanilla with no jQuery dependency, CSS is isolated under the dfpackpro prefix with a configurable accent color. No class or controller override is installed.