Monday, 8 June 2009

Is ExpressionEngine the perfect CMS for you?

ExpressionEngine

Over the last couple of weeks I’ve been using ExpressionEngine on a client project. Other than briefly playing with it about a year ago, this is the first time that I’ve really got to grips with ExpressionEngine and deployed it on a live project. So, I thought I’d share some of my initial impressions.

This is by no means an extensive review of ExpressionEngine, just a few ‘first impressions’ after a couple of weeks of intensive hands-on. I will inevitably be comparing it to WordPress quite a lot.

Which is the best?

So firstly, lets get it out of the way, ExpressionEngine is by far the best CMS that I’ve used – and I’ve used a few. Is it right for every single job? Well, of course not. But I’ll get to that.

ExpressionEngine offers a hell of a lot more than what I will cover in this article, but the main killer functionality that puts it head to head with WordPress, and then well and truly wipes the floor with it, is multiple weblogs and custom fields.

Multiple weblogs is, rather obviously, the ability to create multiple blogs (as opposed to WordPress’ single blog) within one website. However, the term weblog is rather misleading as a weblog doesn’t have to be a blog, it can be anything you want.

Think of a weblog as a container for your content, which combined with the power of custom fields – which are really easy to manage and implement – you can shape that container of content exactly how you like. So potentially you could have a weblog for products and create a shop. You could have a weblog for research articles and create an information repository. You can shape a weblog for whatever your creativity wants!

The flexibility that multiple weblogs and custom fields provides is limitless. Whatever content you want to bung into your site, ExpressionEngine feels perfect for it. Compare this with some of the CMS plugins for WordPress that try to do clever things with custom fields – they just feel ‘hacky’.

Template language

One thing about ExpressionEngine that does take quite a bit of getting used to is it’s template system. It uses its own template language with ‘template tags’. This is one of those things that you’re either going to love or hate. I suspect people with an aversion to PHP and code will like using a template language, but I personally know PHP like the back of my hand and found using template tags quite frustrating. You can actually use PHP in your templates too, but by default that is switched off.

ExpressionEngine template language

The other weird thing about templates is that they sit inside ExpressionEngine in the database. I don’t like this, mainly because editing markup through a text area field is like pulling teeth. You can dump the templates into text files but it still feels rubbish.

And the final quirk about templates is that they kind of directly relate to the routing of URLs. So you need one for every weblog, even if they are going to be presented in an identical fashion. This invariably leads to some duplicate templates, and when you try and embed repeating elements (such as headers and footers) it can sometimes make things more complicated that they should be.

For example, I have a single header template but to get good unique titles for each page required about 13 lines of the most inelegant and complex template conditionals and tags. Just dirty.

That said, and despite my misgivings about using a template language, the template tags are very powerful indeed. With a bit of creative thinking they can be put to great use and very clever things can be achieved.

Client friendly

Now I don’t know about you, but a lot of my clients are not exactly that computer literate. They certainly don’t know much about HTML – that’s why they’re hiring me! So I was slightly surprised to find that ExpressionEngine doesn’t ship with any kind of WYSIWYG editor.

Furthermore, ExpressionEngine’s file upload functionality is at best, just basic. This is disappointing as for me it’s crucial to provide a solution to my clients that they can just pick up and run with. By comparison, WordPress’s integrated TinyMCE editor and media library is a luxury.

It is possible to install TinyMCE as a plugin and then use it’s own file and image manager add-ons. However, it feels like a bolted on addition rather than the integrated smoothness of WordPress. And these are commercial products so unless you’ve factored them into your quote, you might be reluctant to get the chequebook out.

Which I guess brings me on to my final point about ExpressionEngine: the costs can add up. I personally think that $250 for a CMS as feature-rich as ExpressionEngine represents fantastic value for money. But unlike WordPress which has a great open-source community building plugins and add-ons, most of the useful modules for ExpressionEngine are on commercial licenses and it all adds up.

I would still argue that it’s all good value for money, but I’m sure you’ll empathise that explaining this to clients when they are used to open source and free software can be tricky.

Conclusions

I’ve highlighted a few of my niggles with ExpressionEngine, but in case I didn’t make the point clear enough before, I do think that it is the best CMS that I’ve ever used. By a long way. The main thing that sets ExpressionEngine apart from the competition is it’s extreme flexibility. There really are no bounds to the way you can capture, arrange and display content. This is in contrast to WordPress where you really have to design and develop to certain conventions unless you want to make your job a lot more difficult than it needs to be.

In contradiction, it is ExpressionEngine’s greatest strength that is also it’s biggest downfall. It’s open-endedness means that often it is not obvious exactly how something should be achieved. In fact, most things can be achieved many different ways and there are no clear right or wrong solutions.

If you like the sound of that, then ExpressionEngine is definitely for you. In my opinion though, it creates a critical point where many projects are really not worth putting in to ExpressionEngine. If your site or your client’s site has a fairly simple hierarchy and can be achieved fairly comfortably with WordPress, then there really is no compelling reason to use ExpressionEngine instead.

If, however, your site is more complex in nature and is pushing the limits of what WordPress can achieve without hacking it into CMS territory, then I would seriously urge you to bite the bullet and give ExpressionEngine a go. You won’t regret it!

14 fantastic comments

I’ve been putting off the full “learn Expression Engine” for quite some time. I’ve tinkered with it and have been impressed with its potential, but there are a few niggles (that you mentioned in your article) that have been putting me off taking the plunge.

I think a lot of your concerns are addressed in EE2 which is currently in development. That’s one of the main reasons I’ve put off learning 1.x as I don’t want to re-learn stuff in the new version. But they seem to be taking an incredibly long time about it.

I use Wordpress a lot but you’re right: despite some nice adidtions over the last year, it’s not a very clever CMS for anything remotely complex. There is a CMS plugin called Pods which looks promising and I’ve been experimenting with that a bit, but it still needs a fair bit of work to be really useful: http://pods.uproot.us. But it still suffers from that ‘hacky’ feeling. Unless WP do a complete a re-write to turn it into a proper CMS rather than just a publishing platform, it will never be able to compete with tools like EE or the myriad other solutions out there.

Good article covering what I think are most people’s initial niggles with EE as well as covering the main reasons why it is such a great system too.

I have to disagree with your comments re: using flat file templates. I think this is the perfect solution to template editing and makes it no different to developing any other web site files. You can do it locally, make quick edits over FTP, or even put the templates under your version control system of choice and you get to use your text editor of choice!

There’s a lot to take in when you first dive into EE. Sometimes an intensive period of learning as you work though a project is the best way to get to grips with it. I know that’s how I starte to get to grips with it.

@Matt – Its been said by the folk at EllisLab and quite a few people who have had access to early previews of EE2, that there will be very little in terms of new ‘learning’ to do from the developer’s perspective. IE. Everything you learn now in EE 1.6.x about how to put a site together will be identical in EE2.0 – I’m sure there’ll be a few new template tags, etc, as well as new ways to extend it with CodeIgniter, but the basics will remain the same, and I don;t think you will have to re-learn anything.

Hey Aaron,

Take a look at embed variables and segment variables. This should sort out your gripe about duplicate templates.

I edit my templates through the CP. I like it for some reason!

I might be wrong, but I believe you can upload templates as files:

http://expressionengine.com/docs/templates/flat_file_templates.html

Thanks so much for putting this review together and I look forward to reading more posts on EE from you. Its templating language looks quite similar to eZ Publish. It took me a few months to learn eZ Publish’s templating language, and to use PHP with eZ Publish you need to write ‘modules’ that will be called with its native templ. lang.

Judging by your review there’s certainly quite a learning curve in EE, there are also a few serious drawbacks, as well as perks. One day I’ll give EE a try.

Nice little write-up. You’ve pretty much echoed my first impressions of EE, having been a WP fan for years.

As for the templates in the database issue, check out the Templatizer plugin (http://expressionengine.com/forums/viewthread/114771/), which will free you from the CP when adding or editing template files.

I too found it strange that template files & groups directly related to URL routes. Though I’ve gotten used to it now and can appreciate the usefulness, you might want to also check out the Structure module (http://www.ngenworks.com/software/ee/structure/) which “forgoes the current template_group/template setup and creates “static” and “listing” pages that are all editable through a tree sitemap view.”

Anyway, keep at it. I’m only one EE site ahead of you, and maybe I’m still in the “honeymoon” period, but hot damn is it a great CMS! Like others I’m anxious for EE2.0 to arrive too, but 1.6 is still good enough to bring home to meet the parents.

@aaron
Re:One thing about ExpressionEngine that does take quite a bit of getting used to is it’s template system. It uses its own template language with ‘template tags’.

It does not use ‘its own template language. The template system is by far the simplest to learn.
You know: HTML? XHTML? CSS?
Then you can build templates for ExpressionEngine. As for the template tags, think of them as ‘place holders’ for content.

Re:And the final quirk about templates is that they kind of directly relate to the routing of URLs. So you need one for every weblog, even if they are going to be presented in an identical fashion.

It seems to be that you are under the impression that each weblog needs a template, and/or each template needs a weblog.
If so, then you clearly haven’t spent enough time to make a thorough evaluation of ExpressionEngine.

For instance, you can have multiple weblogs with a few templates, or multiple templates with a few weblogs.
Rick Ellis, founder of ExpressionEngine, demonstrated a fine example a long time ago. He design his own website with a single template.
I followed that idea and used my one template, and pulled data from various other weblogs. Depending which URL segment was shown, determined which weblog and/or weblog field to display.
With creative use of embeds, segments and template tags, ANYthing is possible.

There is an incredible wealth of tips, tricks and How-To articles through the forums.

I would love to learn more about how to ” embed variables and segment variables”. Wish there were some good real examples from which to learn the process..

Danile, yes you can upload/edit templates as files. You can use your favourite editor (BBedit, Textmate, Notepad) or even dreamweaver should you wish …

@Matt – I’m with Angstmann in that you probably shouldn’t let the unreleased EE2.0 put you off getting stuck in with EE1.6. I suspect that the template tags – which is essentially what you need to learn to crack EE – will remain largely the same. Thanks for the headsup about Pods.

@Angstmann – Cheers for sharing your thoughts mate. I’m not sure I’ve sussed out the most efficient way of working with templates yet. I’d like to work out a way I can bung template files into SVN so I can develop on a local installation and then deploy them to my live installation. But even if you’re saving your templates as files, for every new template you still need to create it in the database – you can’t just create a new file can you? I’m not sure how SVN is going to help much there.

@Daniel – Yes you can save templates as files, but as I mention in my response above, you still have to create them from within the admin – it’s still a bit fiddly for my liking.

@Vivien – Thanks for stopping by. As I said in my review I think there comes a point where a project’s scope just fits within EE’s capabilities. It’s not for every project but I’d certainly recommend giving it a go when the right project crops up.

@John – Looks like I’m walking the well-trodden path of the EE-convert ;) And thanks for the plugin links. Especially the Templatizer plugin which looks like it addresses the issue I’ve raised above in my response to Angstmann.

@organizedfellow – I think you’re trivialising the complexity of the template ’system’ or ‘language’ or whatever you want to call it. Any newcomer to EE is going to need to spend quite some time wrapping their head round the many, many template tags at their disposal.

I’ve also recently had a look at Expression Engine and my thoughts are pretty much exactly the same as yours. It’s got a pretty easy learning curve and within a matter of hours I was up and running and creating a site using it.

However, I was evaluating it for a longterm big project, and in the end had to, reluctantly, discard EE due to a) not liking the way URLs worked (I only used the Core version so didn’t try the Pages module, but that struck me as being sub-optimal anyway) b) no real multilanguage ability and c) no easy deployment capability (staged to live).

We’ve ended up using Drupal instead, which has a much harder learning curve and is far less intuitive. However, after a few days of working with Drupal you get a big a-ha! moment (actually more an “oh, right” moment) when you realise just how flexible and powerful it is.

For me, Drupal provides everything EE does and a lot more (plus it’s FREE!)

Yes it does have the learning curve, but as @david stated, once that penny drops you realise what a great system it is. The time you put in to it really pays out. EE is more flexible in the ‘multi-blog’ area than WordPress, and it’s less ‘hacky’ than WP to make it work this way. But to me it still overcomplicates the creation of custom content types / weblogs which can be done entirely without code in Drupal.

I’ll be interested to see EE 2.0 still, and if some of the URL rewriting issues are wrapped up, which I found particularly offputting in 1.6. In their favour, both EE and WP are much easier to theme / design for than Drupal, and have prettier admin interfaces, so I’ll be looking at it again when the new version finally appears.

@David – Just to pick you up on one of your points, the site I developed needed a multi-language capabilities (English and Welsh) which I found really easy to implement using custom fields and then having a seperate path.php configuration file in a sub directory for that language. For details you should check out this multi-language module. However, completely with you on the limited deployment capabilities of EE.

@Luke – Thank’s for sharing your views on Drupal. I’ve never actually tried Drupal but know it has a very loyal following. I think the learning curve has always put me off, knowing that if I threw a live project at it I may end up losing money by the amount of time it would take me to ‘wrap my head around it’.

Hi Aaron,

Thanks for pointing out the module: if I’d have known about it, it would have made my choice harder. However, I think it maybe still reinforces the way I think which is that: EE (even the free version) handles very well much of what you need and, for most sites (that I’ve done anyway), it handles all of it. Outside that 95% of things, however, you can hack it to get an OK solution, but there it ends.

For example: things that look missing/restricted from the EE multilanguage implemention compared to Drupal

- UI issues: if you want to have, say, two custom fields (in addition to body and title) and thirty languages (which is what we may end up with) you’d end up with 120 fields on one form
- What if you want a translator to have access to their translation, but not other translations
- What if you change the original – how do you flag the other translations as out of date, and how do you know when they have been updated
- Can you run a multisite installation and have certain languages available to some sites but not others (e.g. your French site only wants French, your Gemran site only German, your Swiss site both)

I certainly wouldn’t start to learn Drupal if you need a site (even a simple one) in a short time span, but after a couple of weeks fairly intensive use, I’m pretty confident I’m at the stage where I can do anything in it that I’d want to do in EE. But yeah, if I hadn’t needed the fairly specific requirements for one site, I doubt I’d ever have bothered.

What are your thoughts?