Smart Product Filter for OpenCart 2.3, 3 and 4
Фасетний фільтр у категорії: бренд, ціна, атрибути й опції з живими лічильниками, власним індексом і SEO-сторінками фільтра. Без правок ядра.
What each licence includes
| Feature | Free | Pro |
|---|---|---|
| Faceted filter: brand, price, attributes, options, stock | ✔ | ✔ |
| Live counters that account for already-selected filters | ✔ | ✔ |
| Dedicated index instead of attribute queries — the catalogue doesn't slow down | ✔ | ✔ |
| Duplicate values ("12 V" / "12v" / "12 V.") are merged into one | ✔ | ✔ |
| Numeric values are sorted numerically and work as a range | ✔ | ✔ |
| Filter SEO pages with their own H1, title and human-readable URL | ✔ | ✔ |
| Other combinations get noindex + a canonical to the plain category | ✔ | ✔ |
| Subcategory products on the category page via a toggle | ✔ | ✔ |
| No core patches, no jQuery, no third-party libraries | ✔ | ✔ |
| One build for OpenCart 4.0 and 4.1, separate ones for 3.x and 2.3 | ✔ | ✔ |
Smart Filter turns a category into a true faceted selection: brand, price, attributes, options, stock — with live counters and no page reload. 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.
Doesn’t patch the core
The filter is built in through events and its own catalogue model; no core file is rewritten. So an OpenCart update doesn’t break it, and a single build works on both 4.0 and 4.1. Removing the module is one click — the shop stays exactly as it was.
A dedicated index instead of attribute queries
Instead of scanning the attribute and option tables on every click, the module keeps its own product → value index. Filter conditions become an EXISTS against the index, so the catalogue doesn’t slow down when the shopper adds a fifth or sixth filter. The index updates itself when a product is added, edited, copied or deleted.
Duplicate values are merged into one
“12 V”, “12v” and “12 V.” from supplier price lists are three different strings, and in an ordinary filter they become three checkboxes. Here they’re merged into one value. Numeric values are sorted as numbers (1.5 / 2 / 10, not 1.5 / 10 / 2) and work as a range.
Honest counters
Next to each value you see how many products will remain after selecting it. The counter accounts for all other selected filters, but doesn’t restrict itself — so the shopper never hits zero or sees “(0)” where a product actually exists.
Filter SEO pages
A given filter combination can be turned into a separate page with its own H1, title, description, text and human-readable URL. Everything else the shopper clicks together is closed off with noindex,follow and a canonical to the plain category — so thousands of junk addresses don’t pour into the index.
Small details that show up in practice
- Subcategory products on the category page — via a toggle (in stock OpenCart they’re not visible at all).
- Zero third-party libraries: no jQuery, no slider plugins, CSP-compatible.
- Built-in diagnostics show whether the query is actually being intercepted, whether the index is fresh, and whether the counter cache is working — this class of module tends to break silently, exactly there.
How to install
- Download the build for your version and install it via “Extensions → Installer”.
- In “Extensions → Extensions → Modules”, find “CatCode Smart Filter” and click Install.
- Open the settings and click “Install” — this creates the tables and events.
- Build the index with the “Reindex” button, and choose which attributes become facets.
- Place the module in the category layout via “Design → Layouts”.
What the admin gets
Facets are built from what’s already in your catalogue: category, product attributes and options, price, stock, rating. Nothing needs to be described separately — the module takes OpenCart attributes and options as they are.
For each facet you configure how it’s shown to the shopper: checkboxes, a slider for numeric values, or a range. You decide the order of facets in the panel — whatever people actually filter by in your category goes first.
The index rebuilds itself whenever a product changes, and can be rebuilt completely with a single button — handy once, right after a big price-list import.
How it works, step by step
1. After installation, the module builds its own flat index table of “product → value”. This is a one-time operation; after that the index maintains itself.
2. The shopper ticks a box in the filter. The query doesn’t go against the product_attribute and product_option tables — it goes against this index, a single simple SELECT instead of a pile of JOINs.
3. Counters next to the remaining values are recalculated from that same index, so they’re honest: they show what will actually be found, not the overall count of products with that value.
4. The listing updates without a reload, and the filter’s state is written into the URL.
5. A product changed in the admin or updated by import — the index for that product rebuilds automatically.
Why it’s faster
Standard OpenCart filtering collects the result set with joins against product_attribute, product_option_value and product_description. Each added facet is another JOIN, and on a catalogue of tens of thousands of products the query turns into a multi-second one.
The flat “product → value” index removes this problem at the root: whether there are five facets or fifteen, the query structure doesn’t change. That’s why a shop with a large price list gets the most out of the module — on a 200-product catalogue you won’t notice the difference.
Free version and Pro
The free version is a fully-featured filter: all facet types, honest counters, merging of duplicate values, numeric ranges, a price slider with the real bounds of the selection, applying without a reload, state in the URL, a mobile drawer. No time limits and no ads in the admin.
Pro adds filter SEO pages: you pick a filter combination worth promoting (“yellow cabinets”, “laptops under 30,000”), and it gets its own H1, title and human-readable URL. Every other combination stays under noindex,follow with a canonical pointing to the plain category.
This is the main difference from a “theme filter”: a controlled handful of landing pages for low-frequency queries, instead of either a million junk URLs in the index or no filter pages in search at all.
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.0, 4.1 and 3.x are supported, as well as ocStore builds based on them. Separate builds for each branch ship in one archive.
There are no separate hosting requirements: the index is a single ordinary MySQL table — it doesn’t need Elasticsearch, Redis, or a separate search service.
Under the hood
The module doesn’t patch the core: it works through OpenCart’s standard events, so a shop update doesn’t wipe out its changes, and removing the module leaves no trace in core files. Category pagination and sorting stay native.
Price is taken with special offers and discounts already applied — the same logic used in the listing. So there’s never a situation where the filter says one thing and the product page shows a different price.
The index updates on product save events, so it only adds load exactly at the moment of editing, not via a background cron once an hour.
How to install
1. Upload the archive via “Extensions → Installer” and install the module in “Extensions → Modules”.
2. Wait for the index to be built — on first run the module offers to do this with a single button.
3. In the settings, put together the set of facets for your catalogue and set their order.
4. Add the module to the category layout via “Design → Layouts → Category”, in the left or right column.
5. If you bought Pro, add SEO pages for the filter combinations people actually search for.
Version history
1.0.0 — first release. Facets by category, attributes, price, stock and rating; a dedicated index table; honest counters with an unrestricted own facet; merging of duplicate values and numeric sorting; a price slider with the current selection’s bounds; applying without a reload and filter state in the URL; a mobile drawer; works with no core patches. In Pro — filter SEO pages with their own H1, title and URL, noindex,follow on the rest of the combinations, and no interference with the Yoast / Rank Math / AIOSEO canonical.
Frequently asked questions
Do I need to edit core files or the template?
No. The module is built in through events and its own catalogue model, the core stays stock — an OpenCart update doesn't break it.
Will it hold up on a large catalogue?
Filter conditions run against a dedicated product → value index, not attribute tables, so adding new facets doesn't slow the query.
What happens with duplicate values from supplier price lists?
They get merged into one value, so instead of three checkboxes "12 V", "12v" and "12 V.", the shopper sees one.
Won't the filter clutter Google's index?
No. Only what you've turned into an SEO page goes into the index; the rest return noindex,follow and a canonical to the category.
How many sites can one key activate?
One. The licence is perpetual: you pay once, with no annual fees.
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
—