
Product Page Tweaks for OpenCart 2.3, 3.x and 4.x — the “Add to Cart” button when out of stock, “Price on request”, “Ask a question”
Three OpenCart product page micro-modules in one: what the "Add to Cart" button does when a product is out of stock (disabled with a label, hidden, or "Ask about availability"), "Price on request" instead of the price with a request form, and an "Ask a question" button with spam protection and an e-mail to the shop. The cart refuses such products too. Pro — the same on product cards in every list, a "Sold out" badge, sold-out option values, price on request by categories and manufacturers, and a request journal. Lifetime licence.
- Compatibility
- OpenCart 4.0.2.0+ and 4.1.x (tested on 4.1.0.3 and 4.0.2.3) · OpenCart 3.x (tested on 3.0.5.0) · OpenCart 2.3.0.2 · PHP 7.0+ (tested on 7.0, 8.1 and 8.3)
- Version
-
v1.0.0 (OpenCart 4)
v1.0.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3) - Licence
- one site, lifetime
- Trial
- 7 days, no card, one per site
- Updated
- September 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. If our server is unreachable, Pro keeps working for 14 more days. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
OpenCart 4.0.2.0+ and 4.1.x — archive cc_pptweaks.ocmod.zip (don’t rename it: OpenCart 4 takes the extension code from the file name)
OpenCart 3.x — archive cc_pptweaks-oc3.ocmod.zip; OpenCart 2.3.0.2 — cc_pptweaks-oc2.ocmod.zip
PHP 7.0+ (tested on 7.0, 8.1 and 8.3)
Configured shop mail for request e-mails (without it the request is still saved and the admin shows a warning)
Languages: admin and storefront in English, Ukrainian and Russian; other shop languages get English, and the storefront texts can be translated in the settings
Version history
For OpenCart 4.0.2+ / 4.1, 3.x and 2.3.
Frequently bought with Product Page Tweaks for OpenCart 2.3, 3.x and 4.x
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — a Nova Poshta module for OpenCart 2.3, 3.x and 4.x

LiqPay — Card Payments for OpenCart 2.3, 3.x and 4.x

Telegram notifications and Viber/SMS for customers for OpenCart
Full module description
Product Page Tweaks for OpenCart — three popular product page improvements in one module: what the “Add to Cart” button does when a product is out of stock, “Price on request” instead of the price, and an “Ask a question” button. No core edits and no OCMOD — built on OpenCart events, for 4.x, 3.x and 2.3. Customers don’t add to the cart what you don’t have, and instead of leaving they send a request that reaches you by e-mail.
Honestly about testing. The module has been tested end to end in local shops on OpenCart 4.1.0.3, 4.0.2.3, 3.0.5.0 and 2.3.0.2 with the default themes: installation through the standard installer, every button mode, the cart refusal, price on request in lists, the form with spam protection and the e-mail in the mailbox, the Pro features, uninstalling, and next to CatCode One Page Checkout. We have not tested the button changes in third-party themes (Journal, Unishop, etc.) — the cart guard and the price label work there, while the button’s look depends on the theme markup. Check it on your theme in the 7-day Pro trial.
What the customer sees
- Out of stock — the button says so honestly. Four modes to choose from: leave as is (OpenCart’s default behaviour), show the button disabled with an “Out of stock” label, hide the button together with the quantity field, or replace it with “Ask about availability”, which opens the form.
- No flicker: the button is hidden by a style before the scripts load, so the customer has no chance to click it.
- One-click buttons disappear on such a product too — CatCode Quick Order right away, other modules by a CSS selector in the settings. On other products they stay.
- One light form for three cases: a question about the product, a price request, an availability request — with the right title and a prepared message. Name, e-mail, phone (off / optional / required), message and, if you like, a consent-to-data-processing checkbox.
- Spam protection without a captcha: a hidden field for bots, a signed time stamp (a form sent faster than 3 seconds is rejected), a per-IP limit and a shop-wide hourly limit.
- An e-mail to the shop with Reply-To set to the customer and a link to the product — you reply straight from your mailbox.
- “Price on request” for chosen products and for every product priced 0: a label instead of the price, “Request the price” instead of “Add to Cart”. Specials, discounts and tax are not shown either.
- In every list: categories, search, specials, manufacturers, home page modules, related products, compare, wish list — a label instead of the price, and the cart button leads to the product page with the form.
- The cart on the server refuses both a sold-out product and a price-on-request product — even if a theme or a direct request tries to add it.
On a phone the form opens at full width with no horizontal scrolling.
Pro: cards, badge, options, journal
- The same behaviour on product cards in categories, search, specials, manufacturers, modules and related products: the cart button of a sold-out product is disabled, hidden or leads to the form.
- A “Sold out” badge on the photo — on the product page and on cards.
- Sold-out option values: OpenCart simply hides values with zero quantity, and the customer can’t see that size M exists at all. With Pro the value is shown greyed out with an “out of stock” note, it can’t be chosen, and the cart refuses it.
- “Price on request” for whole categories (with subcategories) and manufacturers — no need to tick products one by one.
- Extra recipients for requests and a confirmation e-mail to the customer.
What the admin gets
- Five tabs: Out of stock, Price on request, Questions, Requests, Licence — plus the “Module is on” switch that turns everything off in one click.
- The rule under control: only for chosen stock statuses (pre-order and “2-3 Days” can stay buyable), products with “Subtract Stock: No” are skipped, and a separate “always buyable” list for made-to-order products.
- A statistics line right under the setting: how many enabled products have zero stock and how many of them fall under the rule.
- Storefront texts — your own for every shop language: the button label, the price label, form titles, the thank-you message.
Requests are stored in the database and deleted automatically after the set number of days. In Free the admin shows the last 20; Pro gives the full journal: type (question, price, availability), status, search, filters, deletion and CSV export.
How it works — step by step
- Install the module and open Extensions → Modules → Product Page Tweaks.
- Out of stock: choose the button behaviour and look at the statistics line — how many products will fall under the rule. Selling to order — “Leave as is”, the status filter or the “always buyable” list.
- Price on request: choose products (with Pro — categories and manufacturers); products priced 0 get here automatically if that is switched on.
- Questions: turn on the “Ask a question” button, the form fields, consent and the address for e-mails.
- Done: requests arrive by e-mail and appear on the Requests tab.
Under the hood
- No core edits and no OCMOD: three OpenCart events — template preparation, page output and the cart guard. The module changes only template data, so the default templates stay untouched.
- The price is hidden at the data level: the template receives a label instead of the price, not CSS on top of it. Prices that other modules print from their own queries (SEO structured data, feeds, quick view) are not changed.
- Order, cart, e-mail and checkout pages are not touched — the regular OpenCart rules apply there.
- Compatibility: tested next to CatCode One Page Checkout — adding to the cart works, a sold-out product is refused, the checkout page opens.
- Page cache: with full-page cache modules the form’s time stamp (valid for 7 days) is cached together with the page — set a shorter cache time.
- Uninstalling: events, settings and the requests table are removed, and the storefront returns to its default behaviour.
How to install
- OpenCart 4: Extensions → Installer → upload
cc_pptweaks.ocmod.zip→ “Install”. OpenCart 3: the same withcc_pptweaks-oc3.ocmod.zip. OpenCart 2.3: copy the contents of theupload/folder fromcc_pptweaks-oc2.ocmod.zipto the shop root. - Extensions → Modules → Product Page Tweaks: install and open it.
- Out of stock tab: choose the button behaviour and check the statistics line, then Price on request and Questions. Save.
- For Pro: paste the licence key from the e-mail after payment or start the 7-day trial on the Licence tab.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
My products sell at zero stock — will they all become unavailable?
The module treats a product as sold out when its quantity is 0 or less and disables the button by default. So right after installing, look at the statistics line under the setting: it shows how many zero-stock products you have now and how many of them will fall under the rule. For made-to-order sales choose the "Leave as is" mode, leave the matching stock statuses (for example, "Pre-Order") unticked, or add the products to the "Always buyable" list. Products with "Subtract Stock: No" are left alone by default.
Does the module work with my theme?
It is tested on the default OpenCart 4.x, 3.x and 2.3 themes. The price label and the cart guard work at the data and server level, so they apply in any theme. Changing the button itself (disable, hide, replace) finds it by the usual OpenCart markup — we have not tested this in third-party themes (Journal, Unishop, etc.), and if a theme draws the button its own way, the button may stay in place, although the cart still refuses the product. Check it on your theme in the 7-day trial — and write to us if something is off.
Does the module hide the price everywhere?
Everywhere OpenCart prints the price: the product page, categories, search, specials, manufacturers, modules, related products, compare, wish list. Prices that other modules print from their own queries (SEO structured data, product feeds, quick view, their own one-click buttons) are not changed.
A product is already in a customer's cart and then sells out. What happens?
The module blocks new additions to the cart. A product added earlier checks out by the regular OpenCart rules — the "Stock Checkout" setting.
What data is stored from requests?
Name, e-mail, phone (if enabled), message, product and IP address. Requests are deleted automatically after the set number of days (365 by default); if needed, enable the consent checkbox in the form. When the module is uninstalled, OpenCart deletes both the settings and the requests table.
How do I install it on OpenCart 2.3?
The OpenCart 2.3 installer needs FTP, so it is easier to copy the contents of the upload/ folder from the archive to the shop root and then install the module under Modules.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—


