Just a few short years ago, options for Open Source PHP ecommerce platforms were extremely limited, and often the only way to put together an ecommerce store online was to have a bespoke system built. Not any more, though - now there are plenty of options. We take a look at the top five contenders to see what each has to offer.
The first name down was the big dog in this particular park - Magento. In a relatively short space of time, it has achieved remarkable success, and its recent acquisition by eBay indicates little intent to slow down.
Second, showing great promise, is the wonderful OpenCart. OpenCart is known for being a speedy way to get an e-Commerce site online and for having an easy-to-work-with codebase. Not as full-featured or "entreprisey" as Magento, it is nevertheless an excellent platform.
Usually mentioned in the same breath as OpenCart as a worthy alternative to Magento, PrestaShop is a capable platform using the Smarty templating engine. The most common complaint? It's developerd primarily by a company in Paris, so unless your French is up to speed you may find the documentation a touch tricky.
The only entry in the list which isn't a specialist e-Commerce platform, Drupal is still an extremely popular choice, largely because of its large community and vast array of extensions. It has strengths in areas where the other contenders are lacking, primarily due to its primary function being as a CMS rather than an e-Commerce system. The Commerce plugin (as one of several options) adds e-Commerce functionality to the system.
And finally, bringing up the rear, is the oldest of the lot - osCommerce. Despite a history of poor security, difficult maintenance and spaghetti code, it remains one of the most used platforms and has a huge community behind it. Development has slowed recently, prompting rumours that the project may be heading for the graveyard.
With the exception of Drupal, where an extension is required to add basic e-Commerce functionality, this comparison will not include functionality added through extensions - I am comparing the products out of the box.
Magento was simple to download, with older versions of the software available in tabs, although, system requirements were hidden away on the downloads page. Installation instructions were provided during the download process, and the installation guide was excellent. Installation was slow, though, largely because of the size of the software. It could have done with more explanatory text - osCommerce did this well - and any cleanup was handled automatically, which was excellent.
OpenCart has a reassuringly professional feel to its installation procedure. Downloads were easy to find, including earlier versions, although no installation guidance was provided when downloading. Requirements checking was simple and clear, and your stage in the process well indicated. It also lacked explanatory text and there was no option to clean up automatically after itself and set sensible permissions.
PrestaShop downloads were easy to find and grab, though system requirements were rather better hidden, with a link near the bottom of the download page. The download screen links to installation guides on the main PrestaShop site, which are excellent and include videos - but these are not linked to from the installation procedure, which is a real shame. System requirements checking was simple enough, with clear instruction on what to do to correct any issues. Cleanup is not automated, but is enforced (good idea) - you can't log in until you've renamed your administration folder and deleted the install folder. Finally, each of the two installations run during the writing of this article resulted in errors in either the admin area or the shop itself.
Drupal downloads were easy enough to find, and installation instructions and system requirements were both linked obviously from the downloads page. Indications of where you are in the installation process are simple, and requirements checking during the process was good, with clear instructions on how to address any issues. Unfortunately, it is the only of the systems to require you to manually create a configuration file, and this seemed rather unnecessary. As with most of the other platforms, there was little help text along the way. Drupal did clean up after itself though, with the installer being disabled after it has been run.
osCommerce was less smooth than the others to download - it's not obvious where to go to download the software from the homepage, although the downloads page is very simple. Requirements were specified on the download page, but no installation instructions. It was simple to install, with a guided process that confirmed requirements were met, gave good feedback and included plenty of help text. It might have been nice if it had given the option to run a cleanup script once complete, to wipe the install directory and set sensible permissions.
OpenCart uses PHP files for its templates, which is something I am a fan of (why introduce a new variable and control syntax, processed by PHP, when it already has these things?) and as a result the templates are simple to write and maintain. Themes are held in folders, so many can be installed to a site at once. There are plenty of themes available as well, both free and paid.
PrestaShop makes use of the well-known Smarty templating engine, and can handle multiple templates being installed at one time. The themes don't have the ability, like Magento, to inherit elements from each other, but they are easy to build and simple to maintain. There are plenty of themes available as well, both free and paid.
Theming Drupal is not considered terribly good fun. Designers and front end coders working with it for the first time have a distinctive haunted look, largely because the parts of each page can come from so many different places. On the plus side, multiple templates can exist side by side, and templates can include extra functionality when needed. There are also some excellent templates available to download, although most will require some work to make them fit the specifics of your site, depending upon the modules you have installed.
The default osCommerce theme is terribly outdated and a major let down. As with the other platforms, though, there are some stunning templates available. Unfortunately, there is no integrated templating engine, and as a result many templates require changing of core files for installation.
All of the contenders score well on extensibility, with both the type, range and ease of building of extentions (a.k.a. addons) taken into account. Drupal and Magento are pretty even - Drupal has a much larger collection of extensions, largely because they are quicker and cheaper to build, but Magento's are generally of a higher quality.
The rest are all fairly evenly matched, with extensions numbering in the thousands providing similar added functionality to all of the platforms. OpenCart has a slight edge over PrestaShop and osCommerce when it comes to extensions development though, thanks to better documentation than PrestaShop and better architecture than osCommerce.
The most commonly required extensions - for payment and shipping configuration - are all present on all platforms for most of the large providers.
Most stores require at least some ongoing development, integrating with new services and adding new features over time. So how do these platforms compare when it comes to having some custom work done?
It is difficult to know how to score Magento when it comes to development. The system's architecture, inheritance setup, XML config system and use of the MVC pattern all make it usually excellent to work with. It provides plenty of API interfaces, reusable objects, and has intelligent use of namespacing to reduce the risk of conflicts between modules. The code is also clean and well documented throughout. On the other hand, it can be slow to write for - it is a monster, with hundreds of files in a nested structure that really takes some getting used to. The observer pattern used frequently in Magento can make debugging some problems deeply painful, as you need to find which of dozens of observers are causing a headache. Overall, it is the most technically advanced, and by some way, but that carries with it something of an overhead, making development for Magento often more expensive than comparable systems.
OpenCart is, for the most part, pretty simple to develop for. It's generally faster than Magento, thanks to a simpler structure and faster page times. It uses an MVC pattern, and has great documentation. It does suffer from an unfortunate folder structure, where a single simple custom module can have files in lots of different parts of the directory tree, but once you are familiar with the layout this is less of an issue. There is a lot of repetition in creating OpenCart modules as well - Magento's easy Grid/Edit/Form setup is much simpler and faster. Overriding core functionality is also a painful experience, relying on third party modules that search and replace within code, rather than hooks or class overrides. Despite these shortcomings, generally OpenCart's simplicity makes developing modules more of a pleasure than with some of the competition.
PrestaShop has a better module folder structure than OpenCart, similar to Magento's way of doing things, with every module in its own distinct folder. The development documentation has not been great in the past, though does seem to be improving. PrestaShop also provides a robust system for overriding core functionality as well as a variety of hooks and an API.
Drupal uses a simple and straightforward module system for development, meaning modules can often be added extremely quickly, each within its own folder. If the recommended development practices are followed, it's easy enough to avoid conflicts between modules. Where Drupal can be trickier is in overriding core functionality. Often the only way to do so is to copy a core module, alter it, and make the same changes whenever updating in future (this is not dissimilar to other platforms, of course). Drupal does separate themes from modules well, but does not go quite as far as an MVC pattern. Drupal uses a system of hooks to enable you to tap into or override normal functionality in your own modules, however this becomes problematic when wanting to modify or interact with third party modules, as these may not implement hooks in the same way, if at all.
osCommerce is extremely poor when it comes to development. Almost all development work involves modifying core files, and those are largely procedural code. There is no universal URL handler to tap into, no module system, no hooks. This does mean it is often extremely quick to make small changes to the site. It also means those changes can have far-reaching effects, upgrades are extremely painful, and security issues are easy to introduce.
Drupal is well in the lead here, with extensive and varied support communities. They have forums, their own Stack Exchange site (in addition to a healthy amount of activity on the main Stack Overflow), and each module has its own mini-support system complete with bug tracking. All of which is lucky, because with Drupal you can spend a lot of time looking for help.
Magento is just a little behind Drupal. There is an active community on the main Stack Overflow site, and Magento have their own forums - although a large number of posts there seem to go unanswered. Magento also offer paid support options.
OpenCart, PrestaShop and osCommerce all score roughly evenly here. All have their own active forums (OpenCart, PrestaShop, osCommerce), and all have small communities on Stack Overflow (OpenCart, PrestaShop, osCommerce). PrestaShop offer a variety of paid support options as well.
With Open Source systems a couple of the potential major costs usually associated with ecommece businesses are no longer an issue - building a system is unnecessary, and no need to pay for a license. However, there are still significant costs associated with hosting to be considered. Performance is a significant issue too, with slow sites converting customers at a lower rate than faster competitors.
Magento scores poorly here, requiring a beefier server than the other contenders to serve a comparable level of traffic, as well as needing PHP modules that are not always present on web servers by default. Performance can be very poor without tweaking of server configurations and addition of opcode caching modules. Even with plenty of server-side shenanigans, pages are heavy and difficult to trim to a healthy size. It redeems itself slightly with its ability to scale to multiple servers easily, but, for smaller online shops, this is an area where Magento has much room for improvement.
OpenCart and PrestaShop are evenly matched, with comparable load times out of the box and similar hosting requirements. They are not as demanding or as expensive to host as Magento, and both will work on the majority of PHP hosts.
Drupal will run on most PHP hosts, but will usually be pushing the limits of standard virtual hosts. It runs well on VPSes and up, but also suffers from slow load times. As with the other sites, speed can be vastly improved with opcode caching and some of the community modules.
osCommerce is not terribly fast when it comes to page loads out of the box, though there are plenty of optimisations you can perform to bring it up to spec. Where it does score well, however, it ubiquity of hosting. It has been around since early version of PHP and runs fine on a standard virtual server, so can be one of the cheapest and easiest system to host.
Management of a store, including product pricing, inventory and data, categorisation, order statuses and so on is important to any e-Commerce venture. A management system should be intuitive and quick enough that customer service staff can use it without extensive training, and should allow restriction of access to different parts of the system for different users. Functionality like the ability to manage multiple stores from a single interface, handle multiple languages, or customise designs for specific pages or sections, while not universally required, is becoming more and more important.
Magento scores well in most ways, although their management area is not particularly intuitive (especially when it comes to order statuses, invoicing and shipping). Access control is excellent, and the system allows almost every aspect of products to be controlled through their EAV model. Products can be of various types (attribute sets and configurable products both work very well), special offers are powerful (although no 3 for 2 support is still a serious omission), and rule-based product relationships are very useful. Magento also offers multi-website and multi-store functionality, although this can have a significant negative effect on performance.
OpenCart is more intuitive than Magento, handles multiple stores well, and has a basic but functional permissions management system. Editing of products, categories and orders is simple and quick. Especially nice is its support of multiple languages. However, special offer support is weak, automated relating of products is missing, and stock control for configurable products is limited to one criteria (so if you sell tshirts, you can't specify stock for each combination of colour and size you have available).
PrestaShop supports configurable products well and has good granular permissions management. Unfortunately, it is not particularly intuitive, and does not support multiple stores from a single installation (although this feature is currently in testing, so should be available soon). Unfortunately, like OpenCart, it also has weak special offer management facilities and no support for automated relating of products. I do like that management of an item, that on other systems is spread over several pages, is often on one page in PrestaShop - a small point, but much appreciated.
Drupal scores badly here, largely as a result of e-Commerce being an addon, rather than native functionality. As a result, categories, products and related products are traumatic to set up. Access control and multiple store support are both good, but the kinds of refinements expected of a modern e-Commerce platform are lacking - most things are possible, but slow and usually in a way that makes introduction of errors almost inevitable. Finally, and possibly most seriously, it is badly let down by its counter-intuitive administration area.
osCommerce is simple to use, though not intuitive. Unfortunately, that is largely where the positives end - it cannot support multiple stores, configurable products, related products or users with different levels of permissions. Many of these features are available by way of community modules, however. It does have basic support for special offers, and a simple to manage system for categories.
This is an area where Drupal shines, and where Magento, OpenCart, PrestaShop and osCommerce are well behind the curve. A modern CMS allows granular control of access to edit content, versioning of documents, publishing dates, commenting on posts and so on. At the minimum, an e-Commerce platform should be able to offer basic blog functionality. Only Drupal is up to the task here, being first and foremost a CMS.
Only osCommerce presents a serious concern out of the box, with a terrible reputation for, and history of, insecurity. Efforts to improve it are ongoing, but once a product has a reputation for poor security it is tough to change it.
Drupal fares a bit better, although the reliance on modules means that sometimes, even though the main platform itself might be secure, exploitable weaknesses are introduced (this is true of all of the platforms to some extent, but Drupal has greater reliance on extensions if run as an e-Commerce platform). Generally security of the Drupal platform has been good, and it's been well tested, running high profile sites like Whitehouse.gov without incident.
Magento, OpenCart and PrestaShop are all fairly even here. Exploits of the core platforms are comparable in number and severity. Magento offers an Enterprise version of their software (for a fee) and this claims to be fully PCI compliant - if this were to be brought to the Community edition as well, it would have an advantage in future.
Finally, how easy is each for a consumer to use, and how good is each platform at bringing in customers and marketing specific products? This is almost entirely dependant upon the theme chosen, the quality of development and hosting, and a thousand other factors. However, out of the box, ...
Magento is excellent for consumers, despite a few recurring issues. Filterable categories are excellent, and Magento handles complex products extremely well, making the shopping process very straightforward. Integrations with third parties for payments are also mature and well tested, meaning few surprises for shoppers. Sometimes let down by bizarre behaviour (categories showing as empty and the search returning no results being common issues), it is still comfortably ahead of the competition. Search engine optimisation is excellent, and the ability to run promotions from the CMS at various points in the site is also very welcome.
OpenCart, PrestaShop and osCommerce are very evenly matched here. All provide a friendly browsing experience, and both suffer from the serious ommision of category filters; however all also have an excellent shopping and checkout processes. OpenCart and PrestaShop both include product comparison, while of the three only OpenCart includes wishlist functionality. OpenCart and PrestaShop have excellent SEO capabilities, and both provide support for promotions on the site.
With a little patience, Drupal is capable of providing a simple and easy to use shopping experience. It lacks some of the options and more advanced refinements of the dedicated e-Commerce offerings, but with Drupal anything is possible - given enough time. It also has good SEO support and the ability to run promotions through the site.
Magento, despite extremely rapid growth, easy installation and excellent extensions, is let down by a lacklustre CMS, expensive running and development costs, and a comparatively poor (unless you are prepared to pay) support setup. Third party extensions and community sites exist to cover most of these shortfalls though, and the quality of code and the power available to extensions make this a great choice for serious e-Commerce businesses.
If you're looking to keep your development costs down, both OpenCart and PrestaShop are fine choices, though for me OpenCart seems to have the edge at the moment. Both have a bit of a way to go to catch Magento, though, especially when it comes to addons and sales features.
If you're after content bells and whistles, you're going to find it tough to talk yourself out of Drupal. It isn't the easiest system to develop with, but there's not much out there that can compete with it on power.
osCommerce is, at the moment, just not competitive, and has not kept pace with the comparable alternatives. Best avoided, for now.
You'll have noticed by now that the above are all PHP/MySQL-based platforms. There are plenty of languages out there and there are open source e-Commerce platforms available on almost all of them. If you're more comfortable with another language than PHP ... then very sorry, but you've been reading the wrong list.
Personally, my favourite CMS for content sites is MODX - it's easy to use, simple to develop for, and has a great community. Unfortunately, e-commerce support is weak, with most solutions available being third party integrations (e.g., FoxyCart) rather than native e-commerce. However, talk of new e-commerce options is rife, and I'm hopeful something will come along to fill this gap soon.
Much like MODX, Wordpress does not have native e-commerce functionality. However, again as with MODX, Wordpress has plenty of plugins that can add a store to a blog, such as WP e-Commerce. There's still a long way to go until either Wordpress or MODX is competitive when it comes to e-commerce, but the signs for both are encouraging.
It was a tough choice whether to pick Zen Cart or osCommerce for the fifth contender in this rundown. When I revisit this later on, most likely it will be Zen Cart that makes the cut. osCommerce I chose for this first comparison because of its age and because of its prevalence - it is still widely used, even if well behind more modern options.
Drupal if you need a decent CMS. Otherwise, in order: Magento, OpenCart, PrestaShop, osCommerce.