Product Bundles and a Free Gift by Order Total for OpenCart 2.3, 3 and 4
Блок «купують разом» на картці товару, знижка на набір окремим рядком у підсумках і автоматичний подарунок від суми замовлення.
What each licence includes
| Feature | Free | Pro |
|---|---|---|
| "Frequently bought together" block on the product page, add a set with one click | ✔ | ✔ |
| A bundle triggers based on cart contents, not a button | ✔ | ✔ |
| Discount as a separate named line in the order totals | ✔ | ✔ |
| A unit of stock can't be discounted twice | ✔ | ✔ |
| The discount is capped at the value of the items it covers | ✔ | ✔ |
| Gift by order total with a hint "add another N UAH" | ✔ | ✔ |
| The gift is an ordinary catalogue item, stock stays correct | ✔ | ✔ |
| Restrictions by customer group, store and period | ✔ | ✔ |
| Required and optional items, its own price inside the bundle | ✔ | ✔ |
| No core patches, three builds: 4.x, 3.x and 2.3 | ✔ | ✔ |
Product Bundles and a Free Gift by Order Total add a “frequently bought together” block on the product page and an automatic free gift once the order total reaches a threshold. There are three builds: for OpenCart 4.0.2 – 4.1.x, 3.0.2 – 3.0.5.0 and 2.3.0.x; the functionality is identical, only the package differs.
A bundle is triggered by the cart, not a button
A shopper who adds the same items one by one, on different days, gets the same price as one who clicked “buy together”. The discount lives in the bundle rule, not in the button, so it can’t be “lost” by entering the shop from a different angle.
The discount is a separate line in the totals
Line item prices aren’t rewritten — the bundle adds a separate named line to the order totals. So it’s clear exactly what the discount was for: it carries through to checkout, prints on the invoice, and can be pointed to on a return.
One unit of stock can’t be discounted twice
If two bundles overlap, the same physical item won’t receive both discounts: units are “consumed”, and the bundle with the higher priority wins. The discount itself is capped at the value of the items it covers, so no rule can push the order total into the negative.
Gift by order total
The gift is added and removed automatically as the shopper changes the cart, has a badge and a lock on its line, and there’s a hint nearby: “add another N UAH”. It’s an ordinary catalogue item, paid for by that same totals line, not a zero-price duplicate — so stock and reporting stay correct.
The limits you’d normally need
- Restrictions by customer group, store and validity period.
- Quantity of each item in the bundle, required and optional items, its own price within the set.
- Discount as an amount or a percentage, with visible savings shown on the product page.
Why a shop needs this
Bundles work well where a product is rarely bought alone: a phone and a case, a drill and a set of bits, a cream and a remover. The shopper already knows this, but won’t go hunting for the second item in the catalogue — so a “frequently bought together” block right on the product page raises the average order value without any discount on the main item.
A gift by order total is a different tool: it doesn’t raise the order value on its own, it pulls the cart up to a threshold. Someone with 850 UAH in the cart, seeing “150 more to unlock the gift”, is more likely to add something than to leave.
What it looks like for the shopper
Below the price on the product page, a block appears with the second item (or several) and the bundle price. It shows how much each item costs separately and how much together, so the saving reads without a calculator.
In the cart, the bundle discount appears as a separate line in the totals, rather than being “smeared” across item prices. This matters for trust: the shopper sees the same price they saw in the catalogue, plus an explicit “Bundle discount” line.
The gift, once the total reaches the threshold, is added to the cart automatically, at zero price and marked as a gift.
What the admin gets
A bundle is put together from existing catalogue items: you choose the composition, set the bundle price or a percentage discount. No separate “bundle products” are created — the catalogue doesn’t get cluttered.
For the gift you set a total threshold and the item itself. You can restrict a bundle by category or period, so a promotion ends on its own, without you being there on a Sunday evening.
How it works, step by step
1. You create a set: the main item, related items, the bundle price.
2. The shopper sees the block on the product page and adds the set to the cart in one move.
3. The module checks the contents of the cart — the cart itself, not what was clicked. So the bundle triggers even when the shopper assembled the same items one by one.
4. The discount is added as a separate line in the totals.
5. If the total crosses the gift threshold, the gift is added automatically; if it drops below, the gift is removed automatically too.
Free version and Pro
The free version covers bundles with a fixed price or percentage, the block on the product page, the discount as a separate line, and calculation based on cart contents. No time limits and no ads in the admin.
Pro adds a gift by order total, restricting bundles by category and validity period, and several simultaneous bundles with correct unit allocation between them.
Price
A Pro licence costs 990 UAH, for one domain. The licence is perpetual: you pay once, with no annual fees.
Technical requirements
OpenCart 4.x, 3.x and 2.3 are supported, as well as ocStore builds based on them — three builds in one archive. The module works through OpenCart’s standard events and doesn’t patch the core, so a shop update doesn’t wipe out its changes.
Under the hood
The discount calculation lives in the same place where OpenCart calculates the rest of the totals, so it lands correctly in the order, in the customer email, and in exports — not just existing visually in the cart.
The module doesn’t create phantom products or change catalogue prices. Remove the module, and prices stay exactly as they were, with no database cleanup needed.
How to install
1. Upload the archive via “Extensions → Extension Installer” (in OpenCart 2.3 and 3.x — “Installer”).
2. “Extensions → Modules” → find “Product Bundles” and install it.
3. Create the first set: the main item, related items, the bundle price.
4. If you need a gift, set a total threshold and the gift item.
5. Check on a test order that the discount appears as a separate line in the totals.
Version history
1.0.0 — first release. Product sets with a fixed price or percentage, a “frequently bought together” block on the product page, discount as a separate line in the totals, calculation based on cart contents, protection against a unit being counted in multiple bundles at once, a gift by order total, restrictions by category and period, builds for OpenCart 4.x, 3.x and 2.3.
Frequently asked questions
Will the discount apply if the shopper added items one by one?
Yes. The bundle is matched against cart contents, so the price is the same for someone who clicked "buy together" and for someone who assembled the cart over several days.
Why a separate line rather than a change to the item price?
So it's visible: the line carries through to checkout, prints on the invoice and is clear on a return. A rewritten item price doesn't give you that.
What happens if two bundles overlap?
Units are "consumed" — the same physical item won't be discounted twice; the bundle with the higher priority wins.
Is the gift a separate product with a 100% discount?
No, it's an ordinary catalogue item, paid for by that same totals line. So stock and reporting aren't broken.
What do I need to install besides the module?
The "CatCode Bundles" totals extension is required as well — without it the bundle is matched but no discount is calculated for anyone.
Questions about the module?
Message us on Telegram — we reply within the working day. We will help with setup, compatibility and key activation.
No reviews yet. Be the first — right below.
Leave a review
Reviews are moderated before publication, which usually takes up to 24 hours.
No questions yet. Ask one — we answer within 24 hours.
Ask a question
We usually reply within 24 hours during working hours.
Buying the module
—