Building a website has never been easier. Gone -- mostly -- are the days of having to hand-code HTML and PHP scripts in order to get a slick, fully functional website, thanks to the capabilities of content management systems that do most or all of the heavy lifting for site creators.
There are boatloads of content management systems (CMSs) for serious site creators, but the most common for websites today are three open-source tools: Joomla, Drupal and WordPress. Actually, to call them "tools" is an understatement -- these are full-fledged platforms, with tens of thousands of add-on tools created by very active developer communities.
These applications have a lot of similarities. For example, all three are written in the PHP programming language, all three are licensed under the free GNU General Public License (GPL), and all three depend on the MySQL database to hold and manage the actual content within a website.
Drupal had comparatively sedate beginnings. Built by developer Dries Buytaert, the project was open-sourced in 2001 and eventually gained a following of community members that has made Drupal one of the most successful open-source projects to date, with a large ecosystem of add-ons and commercial vendors.
Both Drupal and Joomla are designed to enable users to build websites with template-based management, and both let users plug in add-ons that provide highly dynamic features, such as e-commerce, blogging with comments or mapping. In fact, any Web app feature you might think of should be available with Drupal or Joomla add-ons.
Of the three, Joomla is the newcomer to the CMS scene, first released in 2005 as a fork from the earlier Mambo CMS, which was owned by vendor Miro International. The trouble between the projects began in early 2005, when Miro established a non-profit Mambo Foundation (good) that pretty much kept all control of Mambo in the hands of Miro (not so good). A few months of arguments over the exact nature of Miro's interpretation of free software principles eventually led to the split of what would become Joomla from Mambo and the beginning of a vibrant community-based CMS.
Like Joomla, WordPress also began as a forked project in 2003, gracefully leaving b2, its parent project. WordPress actually has two implementations, which can confuse newcomers to the software. WordPress.com is a free service (not unlike, say, Blogger) that allows anyone to create blogs using pre-built themes and tools. (WordPress.com, along with Blogger, Tumblr and Posterous, will be reviewed in an upcoming roundup.) The other, the open-source WordPress CMS software, is the technology I will examine in this article. Initially, my inclination was not to include WordPress in this review. Past experience indicated that WordPress, while gaining complexity and flexibility, was still not quite up to speed with Drupal and Joomla. But after re-examining the WordPress ecosystem and tools, I decided to include WordPress in this shootout of the Big Three open source CMS platforms.
So which CMS is right for you?
It's a difficult question to answer. Apples and oranges are both fruit, but it's hard to quantify one feature or another that makes either better. The same holds true for Joomla, Drupal and WordPress. It's easy for site creators to be passionate about one CMS or the other, but from the outside looking in, it really looks like an apple and oranges comparison.
In the past, I've helped build sites in all three CMSes and I have found good and not-so-good features in each one. To get a better idea of what's going on with these platforms, I used each CMS to build a simple business website for Happy Flights -- a company devoted (somewhat maniacally) to making people's flight experiences, well, happy -- complete with a blog, static pages, forums and a marketplace for goods to be sold. Along the way, I discovered some interesting things that challenged my preconceptions and gave me a clearer picture of the pros and cons of each CMS.
Installing Drupal, WordPress, or Joomla is essentially a three-stage process: prepare a database for the CMS, download and uncompress the files for the CMS, then walk through a Web-based installation that completes the job.
Other ways to install
A note before looking at the end-stage installations of each CMS: If you don't want to worry about the installation, there are many ways you can install any of these three platforms on a Web server. Many Web host providers offer the option of selecting from a menu of CMS servers that can be directly assigned by the host provider to the domain or sub-domain you specify. No muss, no fuss. All you have to do is select what options you want, click a button and in about 15 minutes, you'll have a freshly installed WordPress, Joomla or Drupal server on your domain, ready to configure.
Another option is use a service like Bitnami, which provides open source servers for installation on native devices, virtual machines or even cloud-based servers using Amazon's Web Services. I have used Bitnami servers in all three situations, and the installation is flawless every time.
Of course, you have to install it on the right machine. For this article, I opted to use a straightforward LAMP (Linux, Apache, MySql and PHP) server, as plain vanilla as I could create.
Specifically, this was an Ubuntu 11.04 with Apache 2 and MySQL 5.5 installed. I used PHP 5 and installed a MySQL module for PHP too. I also had FTP server software installed on the same machine, as all three CMS platforms need FTP to upload and install add-ons such as plug-ins, modules and themes.
Once all the software was in place, I had to perform the next step: Create a database with MySQL with which the CMSs would communicate. If you're familiar with the command line on Linux, this is not hard to do, and indeed it's not hard on Windows, with plenty of documentation out there to walk you through the process. The important thing to do is make sure that your CMS has the right permissions on the system on which it's residing. Without those permissions, trying to upload files into the host file system from within the CMS can fail spectacularly.
Once the LAMP (or WAMP) server is configured and the MySQL database is prepped, much of the hard work is done.
For this article, I installed the latest stable versions of the platforms: Drupal 7.7, Joomla 1.7 and WordPress 3.2.1. Here's how each system's installation compared.
Pushing out a Drupal site was a little harder than launching the Joomla and WordPress sites, though not by much. There were actually fewer steps, but sometimes it was not entirely clear what the system was asking for. At my level of expertise, it was always a matter of "Huh? Oh!" and off I would go. Less-experienced users might get hung up by the requests for database location and usernames, though.
This brings up an important safety tip: When you set up your database, make sure you keep track of the password you gave your database user that's acting on behalf of the CMS. I didn't jot it down like I was supposed to and it took a bit of time to recover.
That wasn't Drupal's fault, however, and even though the steps in the Web installation were not as explicitly spelled out as those in Joomla and WordPress, there ultimately was no stress getting Drupal installed and the default opening screen open.
Joomla's installation steps were more spelled out and more numerous, which made the process feel just a smidge safer as I walked through it. This, admittedly, is a subjective call, but I appreciated having all the steps laid out for me in logical order.
The one key difference in installing Joomla was the request to install sample data in the new Joomla site, which is encouraged for beginners. Now, I'm of two minds about the inclusion of sample data, which in this case includes two fairly complete subsites (one for a park and one for a store) in the initial site.
First, if you are beginner, then these examples allow you to judiciously reuse the content, layout and templates for your own Web site. That's pretty much why the material is there. But -- and this is strong but -- if you have any experience with Joomla, then you will definitely not want to apply this sample data, because it will burden your site with a taxonomy of content and content categories that you probably will not want. Undoing all of these elements is possible, but time consuming, so think about building from scratch if you're comfortable with Joomla.
I decided to throw in the sample data, which is quite wordy, because I knew my site could work with the content.
WordPress has made a point about getting its installation process down to mere moments of your time. In fact, it says so right in the first and only WordPress installation screen, announcing, "Welcome to the famous five-minute WordPress installation process!"
There is little doubt that the "five-minute" claim is true to its word. The single installation screen enables users to get their WordPress site up and running fast. There's not a lot of configuration, though, which means that you have to start with a plain vanilla WordPress site every time you install. In many cases, particularly for newer users, this will be a blessing. More advanced users, however, will need to build from scratch. The use of templates copied from other sites, however, should mitigate this.
The installation differences between Joomla and Drupal are, really, negligible. My personal preference leans towards the explicitness of Joomla's install, but that's not much of a differential. More noteworthy is the option to include sample data in a Joomla installation, something that can be a big help in getting beginners started.
WordPress, however, wins hands down when it comes to installation simplicity. If that is something you need, then this is the CMS to use.
While installation of these content management systems are similar, the same cannot be said for their interfaces. Drupal, Joomla and WordPress each present their content in different ways and manage content under different paradigms, as well.
This is really the biggest gap between these three platforms, because the fundamental way in which they treat content is vastly different.
For Drupal, all content is contained within blocks, and the content's type (blog, article, product in a catalog) determines which block the content is displayed in.
Joomla lets you create content within categories too, but content is additionally tied to location on specific pages.
WordPress handles all articles as either posts in a blog or a page on the site, which is fairly intuitive for new users to grasp. Location of content and widgets is handled by dropping them within pre-set locations within a given theme.
Those are just some of the differences. Here are more.
Drupal's administration is handled by a master control bar that appears on the top of the screen whenever an administrator or super-user is logged onto the Drupal site. There isn't a "back-end" control screen, per se -- administrative pages appear as an overlay on the site, such as the Create Basic page screen.
The advantage here is that all of Drupal's controls adapt to the page you're on, so you don't have to "assign" actions to particular pages unless you're working on a site-wide activity. Indeed, the main Dashboard for a Drupal site is often bereft of features -- you can pick and choose exactly what controls and status messages can go into the Dashboard.
But this flexibility can also be a big obstacle for new users, since it's not always easy to see what's going on. The flow of Drupal's administration works nicely, once you figure it out. The learning curve for understanding how Drupal does things is sharper than for Joomla and WordPress, but the payoff is great: Overall, the administration interface in Drupal is much smoother and powerful.
The back-end of Joomla looks like what a site administration control panel should look like: A single set of segregated pages that collect all the administrative tools in one place.
Working in the Joomla controls is easy from the start. Articles are in Article Manager, images are uploaded and stored in Image Master and so on. For basic administration, everything seems to make sense.
But after working with it a while, it became apparent there were some problems with the system. Creating a page was easy, but having menu links for that page in more than one menu became a bit tedious, because each item in Joomla has to have a unique alias. So I couldn't copy a menu entry from one menu straight into another. It was little things like this that kept tripping me up in Joomla and not in Drupal. Joomla also crashed a couple of times while doing seemingly small tasks.
If you get used to these idiosyncrasies, you can make do, but as I did more complex activities, I found myself wishing I had the same ease of use I'd had in the Drupal and WordPress sites.
WordPress administration seems to be a hybrid of the other two CMSs. There is a central Dashboard, which focuses heavily on displaying information about the site. The displayed information can be customized to show what you want to see, which makes it useful for a fast survey and control session.
Like Joomla, working in the Dashboard is simple and intuitive. Posts, pages and multimedia content are all managed in their respective pages, and it's pretty easy to move content around and edit it.
Menus were a little harder to grasp. By default, you can specify whether a page will appear as in the top-level menu or as a child to an existing menu item. It took a bit of effort, but I did find a Menus control in the Appearance section of the Dashboard that enabled me to create custom menus and then place them where I wanted on the site using the Custom Menu widget.
As I walked through each tool's administration controls, I found the Drupal tools less intuitive but ultimately more flexible and powerful. The converse was true for Joomla: easy-to-understand controls, but limitations kept showing up. WordPress was somewhere in-between: the controls were a little tricky to find, but once you found them, they were very useful.
Configuration, in this instance, refers to how easily each CMS put together my fictitious site for Happy Flights. The site, as mentioned earlier in this review, contains a front-page blog, a forum section, a few static pages and an e-commerce section for selling items to unhappy fliers. Articles on the site needed comments and links to social media sites. These are elements the average business site might have, hence their selection.
Each CMS had different strengths and weaknesses for these elements. (I'll review the social media and e-commerce tools a bit later in this article.)
Getting static pages on a Drupal site is easy. Just create a menu option for one of the site's menus, then click Add Content>Basic Page to open the Basic Page control screen. Add your copy, assign the page to the previously created menu item and boom, you're done.
There is a caveat here: The default Drupal setup doesn't include a rich text editor in its content-creation screens, so any formatting you want to do has to be in HTML. You can add a module to get that functionality, so it's certainly not out of reach, but in WordPress and Joomla, the editor is available out of the box, which is a bit more convenient.
There are a plethora of forum and blog modules out there, all of which looked pretty good. Keeping with the out-of-the-box mentality a bit more, I opted to use the built-in forum and blog tools. They were easy to activate and assign to a menu item and while simple, were pretty good for a basic site's needs. If I'd wanted slicker tools, I could have found a lot that met my specific requirements.
Configuring the overall site was very easy. Colors, styles and backgrounds were easy to load using the huge variety of Drupal templates. Ultimately, for fairness' sake, I stuck with the default Drupal template.
Unfortunately, overall site configuration was not so easy in Joomla. In trying to keep with the default template, Beez20, I ran into significant hassles trying to change the banner from the default Joomla image to the Happy Flight banner.
I thought it would be a matter of uploading the banner image, but it turned out that the background image remained in place under my logo. Worse, the solution involved going into the CSS file and making modifications there. Now, I'm no stranger to CSS coding, but there's a rule I have about such things: If the user has to see code, you have a problem. I also had to edit the site's index.php to get rid of the default font size controls that appeared on the top of every page. Again, no big deal, but why isn't this an option in the GUI somewhere?
I had similar luck with getting comments on board. I couldn't find native controls, so I installed the Udja Comments component. That turned out to be a mess, because I had to find and activate the component in the Module Manager and Plug-In Manager, and was ultimately foiled by the requirement to set a position for the comments. There was no "end of every article" position, and this was one place where the normally super-helpful Joomla documentation failed me.
Forums, fortunately, had a much better outcome. I installed the Kunena module, and even though I had to activate the thing in two different places (which really got on my nerves), it worked like a charm.
WordPress' roots as a blogging platform never show more than when configuring site content. Adding and editing pages or blog posts in WordPress is extremely easy to do, since everything is geared around this central premise: make content creation easy.
Theme management was simple. In playing around with free WordPress themes, I found a lot of visual and configuration variety, even though I stayed with the default Twenty Eleven theme for my WordPress site. It took me a little time to figure out how to update site elements like banners, but once established, it was easy to manage.
Because comments are so well ingrained into the blogging mindset, it's no surprise that WordPress comes with a very robust comment management system out of the box. A great freebie for WordPress users is the availability of the Akismet plug-in, which, when activated, taps into Akismet's very powerful comment and trackback spam protection tools. You can get such tools in Drupal and Joomla, too, of course, but having it as a featured out-of-the-box plug-in is very helpful.
Numerous forum plug-ins are available in WordPress, just as in Joomla and Drupal. I opted to use the Tal.ki Embeddable Forums plug-in, because it was widely regarded as fitting the best with many themes and was purported to be integrated well with WordPress user administration. I was not disappointed.
After pulling together various elements of the site, I rapidly got the impression that, while Joomla is really great for managing content, it has some issues with site configuration that don't exist in WordPress and Drupal.
This is a key issue, because Joomla sites will require more coding to get the site to look and feel the way you want -- unless you find the one template out there that matches the vision you want for your website.
Every site should include features to promote content on the site. Each CMS needed add-ons to implement social media promotion, but unfortunately the results were mixed.
For the social media tools, I needed to download a Drupal module.
I settled on AddToAny, and I have to say it worked perfectly right from the start. It offers links to a wide variety of services, including Facebook, Twitter, Digg, Reddit and StumpleUpon, to name a few. AddToAny adds the sharing tool at the end of all individual blog entries and articles if you specify the "blog" and "article" category types.
Installing add-ons in Drupal is very easy, and this module in particular only needed one click to be activated. Configuring AddToAny was also simple, once I found the settings in the Configuration menu of the Drupal control panel.
Social Bookmarking Genius, I was told in repeated reviews, was the best free social media add-on for Joomla, so I dutifully went out to get it.
I installed the component, activated it, and... nothing.
Once again, the Module Manager settings for the module required that I set a position, and it was not clear what that position would be, since the articles I wanted to have social linking were located all over the site in various locations on the pages. This was a universal problem with any module I tried; it would require a position setting, but no position I attempted would work. Nor could I skip this setting.
In the end, I was not able to determine a solution for this problem.
One area where Joomla did excel here: The capability to turn on SEO-friendly URLs is a highly visible option, which should make Joomla websites easier for search engines to index.
Given my success with the AddToAny module in Drupal, I was pleased to note that AddToAny had a popular module for WordPress. But after installing it, I found that it works differently in WordPress -- it added the sharing tool to all pages in the site, based on where I placed the AddToAny widget in the template.
However, the WordPress version does not include Twitter or other social tools, just RSS feed information. To compensate, I located the Tweet This plug-in, which uses the Oauth API to plug straight into Twitter. Tweet This was instantly ready to go and attached to articles as needed.
WordPress doesn't really have any out-of-the-box traffic management tools, but a quick search through the WordPress ecosystem can harvest a large supply of tools that can enable you to manage your site.
I could not determine the solution to implanting Social Networking Genius in Joomla, so it failed this particular test for me. In Drupal and WordPress, adding social tools was easy: activate the module or plug-in and it worked. In Joomla, this was a much less intuitive prospect.
I was not looking forward to adding the e-commerce portion of the Happy Flights site. I have worked with e-commerce tools before and "pain in the you-know-where" is usually the phrase I took away from such experiences.
Happily, that was not the case here.
Ubercart was the e-commerce tool most recommended over the others, so I would have been remiss if I didn't take a look.
I have to say, once I installed it I was quite impressed. The Ubercart e-commerce shopping cart had an excellent feature set, and I had complete control over every aspect of each transaction, right down to options that would calculate shipping costs between ZIP codes based on the weight of the objects ordered.
There were two hitches here. First, in order to get full capability in Ubercart, you have to download a lot of modules to support it. Not hard, but time consuming, and a bit irksome if you forget something.
Second, adding a new product to the catalog is not intuitive. Luckily, I was able to find a third-party blog that walked me through the process, and once I got the hang of actually adding items to the product database, things got much easier. But there really should be an "Add Product" button in Ubercart somewhere to make things even simpler. (Afterwards, I did see that Drupal had added a Product content type to the Add content screen, which would have been nice to know earlier.)
After the bumps in site configuration, I was expecting less-than-stellar results for the shopping section. Not so, thanks to the JoomShopping module.
JoomShopping was easy to install, easy to activate and simple to use. That simplicity came at a cost: Configuration of the base JoomShopping elements was harder than other e-commerce tools, but it did the job it needed to, and slipped into the Happy Flight site with ease. Adding products to the catalog was much simpler than in Ubercart, which was much appreciated.
Getting a shopping system on WordPress is easy to do -- provided the plug-in is compatible with your site. I had initially tried to install the WP e-Commerce plug-in, only to find that it would not install onto my WordPress site. It may have been the newness of my WordPress version that was throwing the plug-in off.
Daunted, but not stopped, I moved to eShop, which installed quite cleanly. eShop adds its own configuration screen to the site's Settings menu, so it was easy to access the controls to configure the catalog.
I was impressed by the depth of control and the way the plug-in fit in with the existing site. It took a little bit of effort to discover how to add products to the catalog, but once learned, the workflow was easy to do.
This one is close to call: I have to give props to tools like Ubercart for the completeness of its features, but JoomShopping and eShop made it easier to build a product catalog.
I think I have to give the nod here to Ubercart. Like the Drupal CMS, the learning curve is higher, but the long-term payoff is a better overall experience.
Near the beginning of this article, I mentioned that all of these CMSs have very vibrant and active communities. I wasn't kidding. To give you an idea of what kind of ecosystem we're talking about, there are 15,884 WordPress plug-ins, 11,216 Drupal modules and 8070 Joomla extensions available at the time of this writing.
It's not all about the numbers, though.
Drupal, being the older product, has a larger and more active developer community. This is certainly reflected in the number of modules, but it also shows in the support for the CMS. The Drupal website has a very good modules directory and solid documentation.
Oddly, when searching for help on some Drupal issues, I was often pointed at sites other than the main Drupal site. This is too bad, because there are some good docs in there.
A majority of Drupal modules are categorized as non-commercial, meaning free, something which is different from the Joomla extension family. Free software users will be comfortable with this, but commercial users may need to get used to the lack of commercial support.
What Joomla lacks in numbers, it more than makes up for in energy.
Documentation on the Joomla site is wiki-based, updated constantly and well-indexed by search engines. So I ran into it a lot more often when searching for help.
There are far more commercial extensions in Joomla, though not so many you get the idea that "free" Joomla is just a kind of come-on for pay-for-more add-ons. The balance between free and paid extensions is fair, and you get the sense that there's a lot more revenue in the developer ecosystem in Joomla. Take from that what you will.
WordPress, like Joomla, has a lot of commercial support and activity, but not so much that you can't find really good free themes and plug-ins on the WordPress site.
I found the WordPress community to be heavily centralized on that main site, which made it easy to locate tools and support for my questions. I sort of liked the one-stop shopping aspect of this community, and found no problems in finding the answers I need when questions arose.
This is, for me, a clear draw. If you can't find help on the main sites for WordPress, Drupal and Joomla, then you will almost always find the knowledge you need on a third-party site.
These are strong communities that definitely add to the strength column of each CMS.
After a few days with all three CMS platforms, my observations have gelled into one overarching theme: All of the CMSes are very good, but they currently play to different strengths.
If I were to make a recommendation, I would tell a beginner to use WordPress, no question. The themes and plug-ins are diverse and numerous, and this is a very good starter CMS that can scale quite well into a more complex site.
I would recommend Joomla for sites that are a bit more complex and are going to be managed by someone with stronger technical skills. For this type of situation, Joomla is perfect: plenty of extensions, easier to learn and enough templates to make site design worries moot.
If I were building a much more complex site, though, I might turn to Drupal first. Though it's harder to learn, it has much more flexibility to scale a site in terms of complexity. It also has the ability to scale up into very complex sites to be used for a variety of business needs.
Each CMS platform has a very strong developer community, however, and if you are planning to pay for help in building a site, there are plenty of experts out there to build as complicated a site as you need with any of these applications.