After running Drupal for 3 years, then Joomla for another 3 years, I have now moved my website to WordPress — after almost picking Drupal again. So here’s the obligatory write-up of my experiences, why I switched and where I think the problems lie in those three CMSs.
In August 2006, after trying about a dozen CMSs, I went live with my website built on Drupal. It promised the greatest flexibility and had a very active community with countless free plugins.
I was happy with that, for a time. Drupal enabled me to define my own category trees, article types and mix WYSIWYG editors with filters for highlighting code, disarming HTML code in posts and letting users write comments.
But it was not convenient – not by a long shot. Drupal lets you use and abuse any feature it provides in any imaginable way. For example, there is no standard "categories" concept in Drupal that plugins could be built against. You are free to define any number or "taxonomies", like topics, places, genres as lists, tag clouds or hierarchies – and even the "taxonomies" concept comes from a plugin.
So any plugin had to be freely configurable to somehow fit into this mess. In the endeavor to build a consistent website, you would often switch plugins countless times and then wrestle the lot of them this way and that way to hopefully end up with the functionality you wanted.
The problem with that was the amount of customization it required from me just to get a standard website running. There are some universal concepts most internet users will recognize, such as forums, categories, tags, static pages, comments, etc. – these could have a clearly defined API in the core CMS so plugin authors can target these. But to get a forum in Drupal, for example, you’d have to create an article type for forum posts, use the comments module for replies and style that article type so it and its comments look like your favorite forum software. In theory.
It didn’t help that Drupal releases early and often – and with breaking changes, causing plugins to be abandoned left and right and themes to stop working and everything to change all the time. I soon grew tired of that.
Back then, I was also running my blog in a separate WordPress site. I had neglected updating WordPress and at the end of 2009, a spam bot had used some WordPress exploit to hide all kinds of disgusting stuff in my pages. When I finally noticed, I had payed to host the spammer’s crap and to further his reputation for about 6 weeks. In return, it saw fit to delete large parts of my posts because this particular spam bot was unable to distinguish between its own <-- hidden spam starts here --> markings and commented sections of HTML (something I did very often while arranging and reworking posts).
So to make it short, I was a bit pissed and decided to no longer blog using WordPress. In the end, I combined both my Drupal website and what was left of my WordPress blog to Joomla.
Joomla had a history of remaining stable – they fixed bugs and added smaller things, but they seemed to avoid breaking changes and major new releases like the plague. On one side, it was a fixed, slightly outdated system – on the other side you could expect all of the plugins to keep working and your theme to still display the same a year or two down the road.
Joomla is a bit quirky in many places – for example it has a fixed two-level category tree, the two levels being named "sections" and "categories", the terms used making no sense at all. Sections are page types – so you could have a "pages" section for your static pages, and a "blog" section for your blog posts. Plugins are called "extensions" the term "plugin" is used for functionality added to special extension points by "extensions" and panels you can put on a page are given the name "modules". There should be a Joomla <-> English dictionary.
But at least it was not a moving target and I could just keep a website up and running. Or so I thought. As my experience with the spam bot take-over shows, CMS need to be kept updated all the time. And in updating the plugins (sorry, I mean "extensions") I used to provide downloads and comments and stuff, things began to break again. You see, Joomla does not have a built-in comments system. There are maybe 3 okay ones for free and another 3 good ones for money.
There also has been a bit of a bloat competition among many
"extensions" to add the most features. So a Joomla download system will not sit
quietly in its corner, storing your files and counting downloads, it will provide its own
content type with its own page hierarchy and custom detail views and so on.
Still not being happy, I set up a Drupal page again in private and began to migrate my posts one by one in the evenings. Drupal had jumped 3 versions and I hoped it was maturing. I had picked the latest Drupal version: 7 – it had just been released a few weeks earlier, so many plugins were not working with the new version yet.
6 months later, all of the plugins I wanted to use had reached a stable release for Drupal 7 and the improved administration interface was turning work into a breeze. Except, all that is a lie. Nothing had changed. Even popular plugins were still in the “alpha – do not use” or “I’m going to update this real soon now” state. By the time I’m writing this, another 6 months have passed. And nothing has changed, still.
So in the end, I decided to give WordPress another try. I’m not sure what motivated me to do this, maybe it was just curiosity. Over the years, I began to favor a simple approach more and more. The CMS should define the basic things. We all know what tags and categories and comments are and these universal concepts should be part of the CMS core so plugins can build against a known basis (just look at Joomla’s sitemap plugins – the poor suckers can’t even weight pages based on comments because there’s no standardized comments system).
The new WordPress does that pretty good. And it’s convenient. Very convenient.
There still are some friction points. For example, WordPress’ WYSIWYG editor is hell-bent on destroying your code. It will replace some things it doesn’t like, remove a tag that it considers unimportant here and there, and then plunge the whole HTML code into one big endless line. I had to use a plugin and completely disable WYSIWYG to be able to write without going insane. After manually migrating 75+ pages, it now almost feels as if WordPress was meant to be used this way.
But that’s really all I have to complain about. WordPress core defines a lot of things, so theme and plugin authors have targets to connect to. And that shows. Free themes offer a ton of cool features that would take months of tweaking and tailoring in other systems. So far I’ve been able to find plugins hitting just the right spot (though the occasional download system bloatware which added half a dozen tables to my database was also present)
As of now, I’m running this set of plugins:
- WPAUTOP – Old, but working. Prevents WordPress from destroying my formatting. The WYSIWYG editor has its own brand of content destruction – even if you never switch to the ‘Visual’ tab – so it’ll only work out with WYSIWYG disabled, too.
- Download Counter – Keeps a list of downloads and gives you links that will download the file while increasing a download counter. Nothing else. Excellent.
Easy FancyBox – If you have an
- Exclude Pages from Navgiation – I didn’t want to design a custom menu (more maintenance work = bad), so all I was looking for was a way to create pages that don’t appear in the menu bar. This does the trick.
- Google XML Sitemaps – Nothing against helping those search engines a little.
- Highcharts for jQuery – I cloned the jqPlot charts plugin for this one and included Highcharts instead because jqPlot has an abhorrent API and breaks the DOM tree of my page.
- NewStatPress – Counts visitors and page views for individual pages.
- Scalable Vector Graphics – WordPress didn’t let me upload .svg files. This fixed it. Then I fixed the plugin, because it gave .svg files the MIME type "mime/type" – which was nonsense.
- WP-GeSHi-Highlight – Performs syntax highlighting on the server side. I’m very happy to be rid of SyntaxHighlighter (I mean, come on, who’s brilliant idea was it to freeze everyone’s browser for 5 seconds when a page contains a longer code snippet and then include Flash *ewww* on top of it for clipboard functionality?).
- WP Twitter Feeder Widget – Displays my latest tweets. There seem to be a lot of these for WordPress all doing largely the same. I’ve seen one on another page that linkifies URLs in tweets, if I find that one I’ll switch over.