I can hear the moans, groans, and clacking of pitch forks as people find out there’s Yet Another WordPress vs Joomla blog post. Who dares write on the subject, that has been beat to death over the last several years, and assume he can write yet another WordPress vs Joomla comparison? Me (I have a battle axe).
Before continuing, let me qualify this blog post: It is not about nit-picky, un-educated statements like “WordPress is better for SEO” or “Your business will be more successful if you use Joomla”. I will not even go as far as to say which is more ‘user friendly’ as I feel it’s not a fair comparison. Instead, this blog post is a comparison through my personal experiences in finding the right solution for the job.
So there’s no mistake of my background: the large majority of solutions we provide customers revolve around Joomla. I’ve done Joomla! training since it was Mambo. If I sit down to write a custom framework, I think in the Joomla-esque MVC approach with all it’s factory methods, etc. I can create 10 Joomla templates faster than any one WordPress theme I’ve ever worked on. So as you, mister WordPress fanatic, start sharpening your pitch fork and prepare to cry “See! Bias Opinion! Let slip the dogs of war…” – Put down your weapon and hear me out for just a few minutes (remember, I have a battle axe). And you, Joomla ninja, stay your shuriken throwing stars from WordPress for just a minute…this is a blog built on WordPress after all.
It all started earlier this year when we needed a multi-site solution for a SaaS platform we setup (Yes Mr. Samurai, SaaS means Software as a Service). By nature, we instantly started looking in to Joomla solutions and even what it would take to do it custom. We looked at JMS. It works, though a little confusing at times. It duplicates sites off of a mother-site (if you so choose), creating symbolic links back to the core files. It also modifies core files in order for it to work – bad, bad, bad. I did some testing and realized it would not fit within our requirements. There were too many things that could and did go wrong throughout the discovery phase.
Joomla Multi Site
JoomlaPlace has a sort-of-like-a-multi-site group of extensions. They work and from what I’ve seen, have some of the coolest ideas so far. But too many things could go wrong (like totally overwriting 100 customers’ content table by pushing the wrong button).
Then there’s Jentla. An awesome system which beats any open-source multi-site solution hands down…if you needed enterprise-level features that is. Jentla is perfect for big corps / enterprises, hospitals, etc. For what we needed it was too complicated, too expensive, and not enough control could be handed off to an individual site.
The Right One
After a month of the discovery phase, I did a quick install of WordPress MU to see what it was all about. I heard of MU in the past but never looked at it. It was amazing to me. Easily create and duplicate sites as fast as typing in the domain name and pressing SUBMIT. Jump to other sites all from within the admin area; site users can see all “Their sites” and do the same. Easily manage site updates since it’s all one code base. Push out a new plugin to all the sites with a touch of a button. Let certain users have access to specific themes…the list goes on. I literally slapped my forehead and said “You’ve got to be kidding me!”. I almost had tears in my eyes it was so beautiful, so flawless, and so effortless.
Tons of Awesome Stuff
I immediately dug deeper, seeing what’s possible, how it could scale, etc: Need database sharding? I mean like….4000 databases? Yeh they got that. Need to separate a site from the rest of the group because it just gets more traffic (VIP sites)? Yeh, they got that too. What if you need to run each site on remote databases? Uh huh, sure can. Want to run a social network on top of your multi-site instance? Yup, covered. What if we want to automatically create a site when a user signs up and then charge them for it too? And then, charge them for upgraded features? Yes we can!
There are some great CDN plugins too. When a user uploads an image, video, or file, it will automatically get placed in an Amazon s3 bucket (without them even knowing). Even as the user is going back to his media manager to place something in a page, it’s so transparent it looks like it’s just stuff on his site but it’s really on a CDN. You can even put your themes and plugins on the CDN if you want! Obviously this saves your server from a lot of headache.
Domain mapping is effortless. Upgrading the system is easy-peasy. Pushing out new plugins to your users is a matter of uploading the plugin and pushing “Network Activate” or if you want that cool “events” plugin to be available for just a handful of sites, you can do that too.
Is it apparent yet what we chose for the multi-site platform? There were a few caveats due to the NOOB factor. Migrating sites / databases to/from domains is more of a headache than an instance of Joomla. This is because of how WordPress stores the site configurations. In setting up an MU instance it’s important to know where it’s going to reside from here to eternity and fairly important that the instance is in a root directory. If you wanted to have fine-grain control to push out data to multiple sites WordPress MU isn’t for you. That’s more of an enterprise level feature. Jentla is more suitable for that. (BTW, I using the term MU even though it’s the older term. I know multi-site capability now comes with every version of WordPress and just has to be enabled; it’s easier to refer to the difference as MU though)
Now for the juicy stuff. I’m going to start with Joomla! first.
Joomla! is in need of something like WordPress Multi-Site. I’ve looked at the solutions out there and nothing comes close. Joomla, to me, has a lot more over WordPress but when it comes to managing multiple sites WordPress wins.
Speaking strictly from a single-site instance: The learning curve in a Joomla! implementation is a little more complex; that’s simply because Joomla is a more in-depth platform than WordPress. I venture to say you can do anything you want with both platforms (I’m allowed to venture, I have a battle axe). However it doesn’t mean you should. Using WordPress to create a site that has a document repository of 50,000 files, e-commerce and POS integration, and integration in to a CRM would quickly become a ginormous monstrosity. Joomla does a good job at separating those features out and makes it much easier to manage as a developer; I don’t know why you would use WP over J! in that case.
Separation of Stuff from Stuff
Joomla’s strong point is in how it’s built. Separation of the template area from the actually functionality of the system is a much better idea than WordPress’s implementation. It still baffles me that you can build an entire application inside a WordPress theme – yes, a theme. This might be easier for the user in the on-set but it’s not a good long-term idea for any business. I equate WordPress’s idea of a theme like inline styles in HTML. Yes you can do it. Yes it might be easier if you’re in the HTML and you want to put some styling in there real quick but in the long run it’s a horrible idea. A theme/template is the design shell of the site. It should not include things like galleries, slideshows, contact forms, job boards, or the ability to create CCK-ish functionality. Those things should be completely separated from a theme/template (Yes that’s my opinion. Remember, I have a battle axe).
More Stuff Separation Please
Though Joomla’s separation is much better than WordPress I still think some more needs to be done. I lost a bid on a large job recently because you can’t put the core files somewhere other than the root of the site (like you can with Drupal, WordPress, or frameworks such as Kohana). Losing the bid was my fault for recommending a Joomla solution but that’s another topic. The fancy-pants J! devs will disagree and say “Yes you can do that if…”. Face it, Joomla is not built to do that. The CMS application needs to be separated more from the framework.
I would like to see Joomla! implement some things WordPress does. I really like how you activate / disable plugins (the equivalent to either Joomla components, modules, or plugins). We lock down a lot of our files in a Joomla instance so when we need to install a new group of extensions we have to do a few minor things in order for the install manager to work. What’s cool with how WordPress does it is you upload the plugins to the plugins directory and it shows in a list of available plugins in the admin. From there you choose whether to enable it and install the new database tables or not. Currently, you can do that with templates in Joomla! but I’m not aware of a way to do that with any other extensions. Am I wrong? You can upload a zip and enter the URL in to the install manager but that is not nearly as friendly as WP’s implementation.
WordPress is an interesting case. I love working with it. Building plugins are a piece of cake. Their api is easy to use. They have hooks for practically everything. I needed to write several plugins for the SaaS setup we did and it was easy, quick, and gobs of documentation were available if I ran in to a question.
I did, however, feel dirty at times. No matter how hard I tried to separate things in classes or use an MVC-esque architecture I was always confronted with the fact that WordPress is not MVC-based. I’m sure WordPress fans will say it doesn’t need to be MVC. Whether that’s right or wrong more separation or flexibility would be nice.
Little things like the hooks/ actions drive me nuts. Consider the following:
add_action( 'admin_head', 'myFunction' );
The second argument is a call to a function. Did you notice it’s a string? Yeh. Me too. There’s no way of doing something like:
add_action( 'admin_head', $someObj->myFunction(someArg) );
This is really frustrating to me as there’s no way of programmatically creating these actions within something, like a class. It ends up leading to just a plain ole’ long list of functions. I don’t know a way around this currently. You have to pass a string in to that argument.
I mentioned earlier that WordPress is not MVC-based and you can build practically a full application within a theme. In it’s defense it was built originally as a blogging platform. It grew to things like custom-post types and building full-scale applications. I’m sure if they had things to do over again they would’ve planned some things differently but as a platform grows in to new features it has to carry the existing code base with it. I really do like WordPress’s hook system and it’s API. It can be better but I do understand probably why things are the way they are.
Joomla could learn a few things from WordPress 3.0′s new custom post types. I know it’s a moot point whether Joomla! should have a CCK or custom fields built in but the way a WordPress dev can create custom post types is just totally cool. Picture something like the JHTML class but for adding new fields to the article manager.
So what’s the difference between the two? The difference is the need.
We chose WordPress’s multi-site capabilities over Joomla’s superior architecture because it would save time, money, and we probably couldn’t have built a better implementation in to Joomla. WordPress’s multi-site platform is proven to scale too so to us it was a no-brainer.
Though I’m a Joomla guy this blog is built in WordPress. There are other Joomla-ers that do the same. I would never use WordPress as an E-Commerce platform or for an application where multi-tiered user level access is required.
Despite the great experience we’re having with WordPress right now we’ll continue to use Joomla! for the custom sites we build. If a client has a reason to manage multiple sites or if the client’s site is a few pages and a blog, we’d use WordPress. Why? Because I have a battle axe.