The OpenCart shopping cart has flown under the radar for years, but it is truly a fantastic system for small and medium scale businesses alike.
OpenCart is an open source eCommerce shopping cart that was founded in 1998 by Christopher G. Mann for Walnut Creek CDROM and later The FreeBSD Mall. It is not unknown, but "underknown" probably due to its lack of advertising.
It has been my primary choice since version 1, being able to handle heavier loads than the popular WooCommerce, but lighter in scale than the massive Magento and similar.
OpenCart is built upon a hybrid Model View Controller (MVC) framework, the customer facing side and the admin side both having side-by-side MVCs. Language directories exist for each as well. Hanging outside this system are the catalog media directories, as well as system and extensions. Additionally, there is a storage folder residing outside the "home" directory, handling caching, vendors and compressed module files (which exist in a Marketplace subfolder).
OpenCart's languages are based in PHP, JavaScript, and Twig for templating. If you are able to get around the controller code, you can pretty much disassemble and rebuild a totally custom site without having to touch the database.
Once you login and visit the admin site, there are a lot of options. But most are intuitive and the majority of business owners can learn the system with a little perseverance.
The evolutionary process of each major version (1-4) has always been a little hanky. The first iterations are usually pretty buggy (mainly in the feature set), and there is a rush of minor updates to fix the bugs. But once it has been stabilized it is a pleasure to work with. (Note: Once stability has been achieved, further revisions are spaced much farther apart... months, even years).
I have a couple of v4 installations running for about 6 months now so I feel comfortable making a few comparisons between the OpenCart 3 vs. 4 versions.
The biggest change I've noticed is a major functionality cleanup in the module installation/removal system, as well as the ease of creating custom modules.
Both versions still require the same naming convention [extension].ocmod.zip. But that's where the similarity ends.
The v3 module installation process is a little kludgy.
- You upload/install the module
- You go to module modifications and refresh, so the installation will be recognized
- You go to the User Group Permissions, find the new module and assign admin (and whatever else) privileges to it
- Then you can enable/configure it or whatever
The v4 process has been streamlined.
- Each module has a simple json installation file in its root.
- Upload the module, then install it (with a button)
- Enable/configure it
That's it!
Note: One of the early v4 bugs was if you uninstalled the module, you had to manually go into the storage->marketplace directory and delete the original file before reinstalling. This was fixed in my version "4.0.2.3". It automatically deletes the original on uninstall.
The other big change is the almost exclusive use of the Events system in v4. Mostly a blessing, a little bit of a curse. Events let you trigger when a module or modification becomes active. For instance, before or after the loading of a template. It allows you to override core functionality by (in layman's terms) switching out the default with the custom. You can make changes to any number of things, including accounts, the payment process, or design changes where the layout/content sections don't apply.
The v3 version was a little bit friendlier for design modifications as you could override controllers and templates pretty easily. With v4 events, design changes are more of a JavaScript injection.
With v4, I think there is a way to get around this. I have ideas but haven't played around with it enough. I believe you can use the events to override controllers in a separate module, stick the controllers that you want to modify in an array and then modify as you need. The trickiest part is figuring out the event routine. The triggers are established, you just need to grab one from the list and assign it (view/common/header/before) or wildcard it (view/*/before) to your extension. Assigning the module itself is the harder part. Sometimes the event may be registered in the admin framework, sometimes in the catalog(front end) framework. Getting a result may be a bit of trial and error in the routing.
The last thing I want to mention is PHP/MySQL compatibility with hosts. Many servers (including shared servers) are dropping CentOS 7 (PHP 7.x) compatibility. OpenCart ~3.0.2.0 or earlier won't run on PHP 8.x. I'm not clued in on which version change supported it, but I know that 3.0.3.8 does, as well as all 4.x versions.
All in all, I'm really happy with OpenCart and plan to continue using it as my primary shopping cart. The later versions especially are pretty snappy (performance-wise) even on shared servers. If you're thinking about setting up an online store, it's well worth considering.