Difficulties of choosing a content management system

How difficult can it be to settle on a system?

I have been evaluating different CMSes for various projects I am working on, and I can tell you, there is no such thing as a perfect CMS! For the uninitiated (and there will be!), a content management system (CMS for short) helps web site operators write and manage articles, pages, blogs and so on, without having to get with the nitty and gritty of coding.

Whilst I could just stick to using WordPress (which I am using for this site) for the new projects, it lacks certain things such as versioning (made a mistake? roll back!), transparent content translation, and proper access control list for finer grained control over what users can access.

Yes, WordPress itself has i18n for templates and the admin, but there is a difference between your application being usable in different languages, and your web pages having transparent translations.

So what am I looking for? This should cover most of the criteria:

  1. Clean URLs – the ability for the CMS to output user (and search engine) friendly URLs – i.e.  mysection/pageitem
  2. Hierarchical pages – being able to group pages together is pretty important for larger sites
  3. Clean/customisable administrative interface – so I can pass it over to the client and let them get on with it with the minimal of fuss withou them being confused nor intimidated.. likely through …
  4. … some kind of ACL / user access control … Give the client edit-only access to the content.
  5. Full template customisation – this requires strong/complete logic-design seperation, and allows the template designer freedom with the code
  6. Template as a file – rather than them being stored in the database;
  7. Per-page-per-template ability – full customisation of each page with its own look and feel
  8. Customisation per-page content variables – i.e. some pages may have two / three blocks of content which would need seperate content entry
  9. Ability to access/create extra database tables/objects – not all content may be in page format
  10. Accessibility of extending the system or integrating other applications with minimal of core-code hacking
  11. Good documentation!

Plus these are very nice to have, but the lack of will not be too much of a deterent, though this depends on the project, and providing it fulfills the other criteria (some of these are as mentioned previously):

  1. Content versioning – many good reasons to have this, the only negative would be extra complexity and space usage, though a good CMS would handle this transparently no?
  2. Content translation – straightforward method of allow the site editor to input content for a page in another language, and for the visitor to access the site in the language of their choice (if available)
  3. Image gallery support – especially for uploading images en-masse, the simple input-browse form element will not do!
  4. PHP-based templating system – no need to learn some obscure tagging system (read more on this at http://thephppro.com/articles/pte.php)

The target websites are your standard business-brochure-sites with a bit of jangle i.e. galleries, hierarchies of content, possibly even some ecommerce! So what’s out there that caters to this?

WordPress as a CMS

Now, since WP2.5 has been released, it has matured into a nice tool for its intended purpose. The new administrative design is certainly much more pleasing on the eye, as well as being simpler; it is much more intuitive for new users to find what they want now. Granted, I have used WP before to power a client’s site, however that was indeed a simple site, though I wish they had dealt with the image-resizing-after-upload back then!

As I wrote the above lists, I’m thinking, hang on, WP does cover much of them right now! It can output clean URLs, has a nice admin interface, does hierarchy for the pages, has PHP-based templates, and you can set up templates for each page. It has a huge community, with many modules and much support out there.

On the negative side, it does show its blogging roots with the lack of versioning and support for customised objects (via the database typically), and you are trading flexibility with content handling for straightforward simplicity.

So, a good choice if you can live with the limitations, or if you’re happy to hack- or should I say, mold – away at the code. Don’t expect to be too impressed at the procedural code base!

The other CMSes

The CMS scene has changed quite a bit since I last looked around, with new and promising systems coming in, and old going out – seen many *nuke systems being recommended much these days?

With the move towards PHP5, it has gotten more interesting.

Those quickly rejected

  • Joomla – if my last experience with Mambo (back then before it split into Mambo and Joomla) was anything to go by, I would quickly give this a miss. I had nightmares with trying to modify the logic to output tableless HTML, and I suspect it wouldn’t be so easy for the developers to change the inherent application design to seperate the design from the logic. Ever wonder why most Joomla-based sites looks similar? I have read some promising news regarding this though. For now, a quick miss.
  • Drupal – I gave this a go last time, and I tried again this time. I quickly remembered why I gave this a miss: the amount of faffing about you need to do to get it working the way you want it to. Yes, version 6 is indeed better – the admin looks cleaner to work with, and plus the taxonomy system is great for classifying content in whatever way you wish.

    The downfall is the amount of PHP code you must put into the node filters, or whatevernots to customise it away from it’s default drupal behaviour – i.e.  to output content in a particular way depending on the content classification.There is no straightforward content-structure seperation here – you add new content which needs a certain so and so, you will have to modify each filter for each block/template/plugin, and so on.

    I tried to like Drupal. If your particular site is compatible with how Drupal likes to deal with templates and content, good. Otherwise, time and hack sink. Targetted at the community website crowd, I’m sure there are many developers who are happy with how Drupal works, but I’m not one of them. It does have content versioning though.

  • EZpublish – this still feels rather slow and bloated for my needs, and still rather complicated to use, so no. Lack of community seems to deter too.
  • TYPO3 – enterprisey – though is that always a good thing? large server footprint required for this, so no, not good for performance.

Maybe, but…

  • Expression Engine – Looks very promising, especially with the amount of features and support coming from the users, and the unique way it handles content. The show stopper? the license. Whilst I could probably try using the Core edition to try an implementation, that’s yet more time investment to decide if it is suited to the project. Will be worth it one day if a project comes up that can cover this investment though.
  • Textpattern – It’s been raved about for how flexible it is. I looked at it… and drawbacks for me: templates are stored in the database, and it uses its own (XML-based?) templating system. Another is how little activity there seems to be with the developers! There is a new branch called ‘xPattern’ though.
  • Symphony21 – (not to be confused with Symfony, the PHP5-based development framework) This looks very promising, and whilst it does mean understanding XSLT instead of using PHP, it is rather powerful. The admin interface is beautifully minimalistic. A possible downside could be that XML-XSLT transformation may be slow, though it shouldn’t be an issue with caching. Only issue? I tried to sign up to download the release, and no email so far. Oh well, I’ll try again some day. Check out their spiffy videos too.

Currently evaluating

  • MODx – My initial look at this was of ‘this administration looks cluttered!’, but reinstalling it again, it doesn’t seem too bad. There are customisable content types, custom template variables and hierarchical pages and URLs are supported. Reasonably decent ACL. The downsides I’ve found so far is the custom template syntax (it uses [[var/command]] , and that’s just for starters) – yet more learning to do, and the admin interface still being slightly unintuitive. I will be looking at the code and extensions some more, but the community seems to be there.
  • Silverstripe – strong new contender here, it has a nice looking admin (though there are a few niggles and issues when trying to rearrange the site structure), and I’m sure a non-technically-proficient user will get to grips with this once they’ve been kept away from the whole setting up sections. The PHP5 OO coding is a big plus – it looks reasonably straightforward to extend the page types with your own demented needs. Current negative points are: custom template syntax, whilst simple to look at, it is lacking custom loops. It also does not support hierarchical URLs – and this is a popular request. I have been leaning towards this CMS, until I realised the lack of hierarchy. Good news is that the people behind this system are working on it.

Cutting my own CMS

What’s wrong with just rolling your own system? There is considerable time investment involved though. I have already built several CMS apps based on my own framework, and this is something that took place in leaps and bounds from project to project over a period of a couple of years.

They are lacking some of the features I am looking for in other CMS’s – I envy WordPress’s upload system and design, and they are basically beautified database-interfaces, no versioning nor multi-lingual ability, but it has search, and it has paging. It does the job, and a big plus of rolling your own system is that you can tailor it exactly how you want it! I am however reluctant to further work on the PHP4-based app, when I am already working on a PHP5 Zend Framework based system. If a client needs some custom development work, and pays well enough… well, this is always an option.

So back to the GO square…

So, carry on with the evaluations, and juggle with using WordPress…ah why not…

BTW any good image uploaders out there? Gallery outputs are easy to code; the uploading and captioning is not!