In late 2006 I posted a ‘mini review’ of ExpressionEngine on my blog. It sat there through several site overhauls and I more or less forgot about it. Fast forward to today (March 2011) and ExpressionEngine 2 is now available and my blog is no more. The thing is, I’m still getting a zillion hits for ‘ExpressionEngine review’ and, rather than keeping an archived copy of my ill informed and outdated post up, I thought I’d have a second bash at it, given that the app has had another four years worth of development and so have my opinions.
Rather than just stating whether or not I think EE is any good (spoiler: it is) the following is a basic introduction to how EE works and what it does well, which hopefully makes it easier to figure out whether Expression Engine is the right tool for you.
Before getting into the nitty gritty it’s probably useful to explain the basics of how EE works and where it sits on the CMS scale. What differentiates EE from many other content management systems (CMS) is that it’s really somewhere between a CMS and a framework. Unlike, say, Wordpress, EE does not in itself generate any markup, nor does it have a plug-and-play template system. When you install EE you are given the option of setting up a demo site to get a feel for how things work, but otherwise you get a completely blank slate.
EE does not dictate a certain content format. This can work in your favour or it can work against you. If you want to build a dynamic site and to have complete control over the markup and content structure then EE fits the bill. If you don’t want to start from scratch, either on the design side or the content structure side, then EE may be a more complex solution than you need. If you have a complex site in mind with varying types dynamic content and lots of template variations then EE really comes into its own.
In 2006 it was all about the blogs. In 2011, maybe not so much, but everyone’s still got one and clearly there’s still a big market out there for blogging software. It’s possible to build a great blog with EE, but you do need to build it yourself. You’ll need an index page, a permalink page, category view pages, probably an archive and a search engine wouldn’t hurt either. EE can handle all of those without breaking a sweat, but you need to setup each template manually. This isn’t hard, but it’s arguably more of a learning curve than with other CMSs which have default templates you can tweak to suit your needs. Here’s an example of a tag that will output the newest 10 posts from your blog:
{exp:channel:entries channel="blog" limit="10" sort="desc" orderby="date"}
<div class="blogpost">
<h1>{title}</h1>
{body}
</div>
{/exp:channel:entries}
All of EE’s dynamic output is generated through tags like that and for the most part they are all well documented, so getting up to speed is fairly pain free.
You can’t just jump into setting up templates though, you also need to get EE configured to suit the kind of content you’re working with. This means setting up ‘channels’ for each of your content types as well as fields for storing channel data. For example, a blog channel might include fields for a summary and a body. This might seem convoluted compared to other CMSs that have those fields available from the get-go, but this is actually one of EE’s core strengths: You can manage as many types of content as you like and they can all be completely different.
Most sites consist of more than simply a blog and a couple of static pages. They might be comprised of a complex set of interlinked, hierarchical pages. They might include case studies, FAQs, portfolios, stores, user forums, the list goes on. In these instances, the more hand-holding CMSs begin to struggle and EE’s flexibility comes to the fore. As EE lets you store data in fields of your own choosing, it doesn’t start creaking at the seams when unusual types of content crop up. You don’t have to start hacking away at the publishing interface to get an appropriate UI as it is automatically generated based on the fields you’ve setup. You don’t have to struggle with outputting your entries in a suitable format as they’re easy to extract from the database based on any number of different parameters.
Ultimately, when you buy EE you’re buying a single app which includes modules for most, if not all, of the key elements of any site and then wraps them all together through a single control panel and templating system. If functionality you need is missing from the core software it can almost always be extended with third party addons that integrate so neatly that end users would never know that they weren’t part of the app in the first place. If no existing third party addon is available then, with moderate PHP experience, you can easily roll your own (I’ve been building and releasing my own ExpressionEngine addons for a while now).
The upshot of all this is that EE is the most flexible CMS I’ve used, yet it is still intuitive and generally simple to use. That’s not to say that very complex sites can be built in minutes – it still takes serious time and effort to build large sites featuring many different types of content – but you will get the job done far quicker than with a full-on framework whilst retaining more control over your site than with most other CMSs.
If you don’t want/need that level of control or you are looking for five-clicks-and-you-have-a-website solution then EE probably isn’t for you. If you’re looking for a tool that will enable you to create just about anything and you don’t mind spending a little time getting to grips with (or paying for help with) what is in essence a very high level programming language then EE may be the platform for you.
(If you’re reading this and thinking ‘hey, this guy builds EE sites, he’s biased’, I’m only building EE sites because it is the best tool I’m aware of. It’s not perfect and I’m always open to trying out the latest and greatest alternatives but, for now at least, I don’t see anything better out there.)