Sunday, July 20, 2008

Content Management Systems

Recently, I've encountered a situation where we needed certain (static) elements of our site to be under the control of a content management system. This seems easy enough. I did a fair amount of research into both Drupal and Joomla, two of the more popular projects that are out in the wild these days. The requirements are straight forward:

  1. Non-technical people must be able to edit content and publish it to the site.
  2. The content needs to be published as static, well formed, HTML.
  3. Multiple templates must be supported such that one can create and manage content for each type of page.

There's always two questions we ask when we see requirements like this; "are these things technically feasible and realistic", but more importantly, "why do we have these requirements?" To better address the former, the latter must be defined.

One of the tenets of a system such as a CMS is that it must integrate with existing infrastructure. In our case, we have an existing site, in production, that can't be easily disrupted. Nor can we take the time to perform any kind of wholesale migration of code or deployment strategy. Again, the goal is to manage just a very small subsection of the site that is entirely static with one of these systems. Easier said than done.

Both Drupal and Joomla have an amazing feature set, to be sure. Both have large, active, communities, plenty of modules, and significant deployments. Upon further inspection of both, what I found both surprised and scared me; neither does what I need it to do. Let me break down the requirements in a more specific way; I would like to create multiple, complete, HTML templates with small sections that can be edited by content authors.

This seems like the easiest use case possible for a content management system, yet neither system seems to handle this easily. Neither Drupal nor Joomla operates "off line," instead opting to render pages dynamically, at request time. Drupal's caching system, which initially sounded promising, simply builds the static page and insert it back into the database. Worse, is that Drupal insists that a site has a "theme" which, while similar to a template, implies that there is only one per site. Joomla at least seems to acknowledge that a site can have multiple templates, but there's no provision for creating them (although one can edit an existing template). Of course, Joomla also seems to lack support for generating static HTML output in a location of my choice.

What Drupal and Joomla both seem to do extremely well is allow one to create a site from scratch with all manners of bells and whistles. Both have extensive support for users, comments, neat little calendar thingies, forums, RSS feed generators... wowzers. These are both great projects for building a site with specific needs, but, and I know this is going to result in hate mail, without writing custom code, neither performs the functions I would consider the baseline requirements of a content management system.

On a side note, I did find the Apache Lenya project which seems to be much more what I would expect from a CMS. The online demo for Lenya doesn't make me feel very confident about it, but I'm hoping it's going to improve over time. In true Apache project style, they seem to have people doing evaluation of what areas they're lacking in and what they need to be successful. No wonder the Apache umbrella turns out such good work.

There's also a number of other projects out there, some of which I've used before, some of which I'm intimately familiar with. That's what I'm avoiding them and not mentioning them at all. Suffice it to say there's a lot of work to do in the CMS arena.

I am interested in Drupal and Joomla in that I think there's something there, but I am surprised at the wide-and-shallow approach to content management. I hope to get a better understanding of the goals of the projects in the coming weeks to see what they're really trying to address. Unfortunately, the do-all projects tend to never do one thing well.