Jan 26th, 2008 An Introduction to ExpressionEngine
People may refer to ExpressionEngine as a blogging application, and it’s true that the design evolved from one; but it’s much more. Underneath the hood (get it?), EE has the power to drive even most medium- to large-scale websites. If you’re looking for a reason to invest some time and effort into learning and installing it, keep reading. This article is intended for those who might already have a website, but who want to upgrade to using a content management system, or for those who might be disillusioned by their current CMS.
Before continuing, you should know that I’m assuming: (1) that you know what a CMS is, (2) that you have a basic understanding of the technologies that power a CMS, and (3) that you have already explored, or at least browsed, the ExpressionEngine website and have a general idea of what it does. I don’t want you to get hung up on terminology or technical concepts and disregard ExpressionEngine as too complicated. One of the reasons for choosing EE over another content management system is because it’s easy to learn, deploy and use.
The weblog module
ExpressionEngine is modular, and is built for scaling. However, there is one primary module that could be considered the heart of the app: the “weblog” module. This module (complimented by category and field groups) is where most content is stored. It is extremely flexible. Case in point is the ability to change the name of the module itself — or, at least, the ability to put an alternate label on “weblogs”. In fact, for the sake of clarity, and to underscore the dynamic range the module has, I’ll start referring to “weblogs” as “databases”. (Keep in mind you need only one real database to power the whole of ExpressionEngine.)
Databases can be anything. They can be product catalogs, media archives, calendars, graphic libraries, et al. Think of a database as a container of items, and the items as basically anything you want. ExpressionEngine allows for multiple (limitless, even) databases.
Perhaps the best way to illustrate this is by using The City Church website as an example. On our site we have multiple databases, all simultaneously available, and all accessed using the same (“weblog”) module. One obvious database is our audio archive, where each message/sermon is an entry. Other databases contain our homepage content, small groups catalog, and online bookstore. Each database is unique in both form and function, and, as I said, each is powered by the same module.
Field, category and status groups
If databases are the heart of EE, then groups are its arteries. Each database has three group assignments as part of its setup: a custom field group, a category group, and a status group. These groups are separated from the database so they may be actively accessible to other databases. This allows databases to share, say, the same categories, but still have different custom fields.
Custom field groups are comprised of … yep, custom fields. The default set of fields (Title, URL Title, Summary, and Body) are typical to a blog, but if your database is meant to be something besides a blog, you can create new custom fields for it. For instance, for The City Church’s audio archive database, I’ve created a custom fields that apply to a message and its audio file, such as “Speaker”, “Campus”, “Service Time”, “File ID” etc. (Read more on how the audio archive is powered.)
Category and status groups are basically the same. Statuses, though, play an important role as they have the ability to control an entry’s ranking or position.
More on groups can be found in the exhaustive ExpressionEngine documentation.
Templates
You can think of templates in ExpressionEngine just like web pages. In their simplest form, that’s all they are. Keeping the same analogous theme, templates could be considered the skin of an EE-powered website … beautiful, external, and flexible; yes, that works.
ExpressionEngine’s templates are what makes it so unique, but they’re also where most newcomers to EE get stuck. I think the flexibility they offer is, ironically, where the confusion comes in. Templates in EE lack the rigidity found in other CMSs. Instead of having a clear and obvious framework, EE’s templates allow you to think outside the box when architecting. The concepts are strange at first, however, the system is forgiving enough that when you finally get a handle on how it all works you’ll wonder how you ever did dynamic websites before.
The first thing to understand with EE templates is that they’re stored in the main, MySQL database, and are not actual files. (There is a caveat to this, though, because EE does let users save templates to the server as files.) Actually, when visitors browse an EE-powered website, they’re only ever accessing one file: index.php. That one file is able to reference the whole of the system, including templates, modules, and plugins.
Templates are grouped into, uhm, “template groups”. Template groups are more than just organizational, and can be extremely versatile in function — more on that later. First, let’s look at the ExpressionEngine URL structure, and how template groups and templates come into play:
http://www.example.com/index.php/template_group/template
After the domain is the index.php file I mentioned. Again, that one file is the key to engaging the EE system. Once EE is invoked, it takes the URL request, and breaks it down; first looking for a template group, then an individual template. This URL structure is not only more human-friendly than typical blogging apps’ (e.g. www.domain.com/index.php?page=1&id=2), but EllisLab claims it’s also more search engine friendly.
The tendency is to think of templates and template groups as files and directories — and that’s just what the EE documentation suggests — but that might lead to more frustration than anything else. I prefer to think of template groups as “topics” or “themes”, and templates as “functions”. That’s because templates can be embedded into other templates, and template groups represent more than just groupings of templates.
When building a site in EE, you can use individual templates for each screen your visitors will see, or, if you’re clever, you can probably build one template — a Lord of the Rings type thing: one template to rule them all. How, you ask? Through the power of URL segments.
URL segments, global variables, and other such trickery
I mentioned that one of the primary reasons to choose ExpressionEngine is because it’s easy to learn, deploy and use; and that’s true. But the main reason I use it is because of its power and flexibility — most of which is found in features exclusive to EE.
The first such feature is URL segments. As I’ve illustrated previously on my blog, URL segments can be extremely useful when coupled with templates. Since ExpressionEngine is essentially taking over the job of serving a website (from the server itself), it also actively processes URL requests, no matter how long, and breaks them down into what are called segments. So in our example above, EE would see the URL and assign {segment_1} as “template_group” and {segment_2} as “template”. It’s not hard to imagine how beneficial having that kind of association can be. I’ll give you an example.
Let’s say you’ve been asked to make some changes to the “About Us” section of a website. No, problem, right? Just pull up the “about” template, make the changes, and hit “Finished”. But what if, before the changes are published, you have to get them approved? You could create a new template, call it “about-preview”, and copy/paste the “about” template in, make the changes, and send the new URL to your client for approval. Or, by using URL segments, you can make it much easier and transparent. You’d just open the “about” template, wrap the changes in a conditional statement — {if segment_3 == "preview"} — and tell your client to add “/preview” to the end of the URL.
We can even take this example further, and apply some other cool ExpressionEngine features like global variables, member groups, and plugins.
To protect the changes from prying eyes, you could also require your client be logged in before viewing the changes. You’d do this by changing the conditional statement to {if logged_in AND segment_3 == "preview"}. Or you might want to make sure only they can see it, not another logged in member: {if username == "client_name" AND segment_3 == "preview"}. Even better, let’s make an idiot-proof link they can click to see the changes:
{if username == "client_name" AND segment_3 == ""}<a href="{path=template_group/about/preview}">Click here to see changes</a>{/if}
To show your client that they are, in fact, viewing the latest revision of changes, you could include a time-stamp, showing the time the “about” template was last edited: (Edited: {template_edit_date format="%%F %d, %Y at %h:%i %A"}), which would render as “(Edited: January 26, 2008 at 4:53 PM)”. You could even include the time since they last visited by employing a third-party plugin called “Since Last Visit”.
Can you see how powerful (and even fun) ExpressionEngine can be?
Flexibility at a premium
What makes ExpressionEngine so flexible could also be considered its greatest weakness. That you have to edit and save templates inside a web browser makes for a terrible development workflow. Who wants to write code in a text area field? Yes, there’s a ways around it, but even that method comes with its fair-share of issues. It’s peculiar, but I believe the template model itself, though versatile and dynamic, is the Achilles heel of ExpressionEngine.
Pushin’ EE and droppin’ names
Despite some small flaws, ExpressionEngine remains a highly capable, extremely flexible website CMS solution. Even the free, Core version packs enough punch to handle a typical blog or small site. I’ve been using it since version 1.0 (actually, since pMachine Pro), and I continue to be amazed and inspired by each new release.
If you’re considering making the switch, I hope you found this quick introduction motivating enough to get started. I suggest you take the next step and download the Core version. You should also browse the documentation and Knowledge Base, both of which are well-maintained and written. You might also want to watch a few of the tutorial videos, and check out Jambor-EE, a third-party tutorial site. Finally, you should definitely subscribe to the ExpressionEngine blog/news feed.
[Update: I completely forgot to mention the excellent support community on the ExpressionEngine forums. Users there are responsive, helpful, and passionate. If for no other reason, ExpressionEngine is worth it for the support available on the forums.]
You might also be interested to know that some highly respected designers and studios already use ExpressionEngine; Happy Cog, for example. Others include:
So, to answer the most-oft question I receive via email: yes, I highly recommend ExpressionEngine [affiliate link].
Sean Sperte is Geek & Mild. His passion for technology and media, along with his interest in
Comments
Leslie 26 January 11:37pm
Stop it, you’re making us blush. Which is to say, thanks.
mike_drechsel 27 January 1:36am
I’ve never had any problem editing my templates using the flat file method you point to from the EE Documentation. I edit exclusively in TextMate (other than creating new templates, which still requires a brief visit to the EE Control Panel for the initial creation, after which I edit exclusively in TextMate). It really works well editing and working the templates in this way. The nice thing is that even though I’m editing externally, the changes are still written to the database (as though I had edited them from the EE Control Panel. That means that all of the templates are still backed up routinely when the database is backed up. Nice.
I only mention all of this to hopefully give people new to ExpressionEngine some confidence that template editing need not be done only in the web browser. It is every bit as easy and reliable to edit them in your favorite text editor.
mike_drechsel 27 January 2:48am
Okay, I lied. If I edit templates with an external editor, the database version of that templates is NOT updated. Apparently, this is an issue that has caught a few people off-guard in bad ways. Just an update. Use caution, I suppose.
PXLated 27 January 8:26pm
Like Mike, I edit externally and don’t find the templating to be an Achilles heel, even when I’m working in the CP. One other quibble, referring to weblogs as databases can be somewhat confusing as they are really data sets (containers) within one EE database The EE database is like a big file cabinet that can have as many drawers as you need and those drawers can contain almost anything.
Other than those, I agree 100% that EE is probably the most flexible, powerful CMS in it’s class.
Ryan Imel 27 January 8:52pm
I appreciated your run-through, thanks. And it’s funny that you are involved with City Church — that site is beautiful, I’ve seen it before. Actually, it’s on my list of “great church websites” that I keep around for inspiration, so kudos!
Thanks again. I’ve been a WordPress guy for some time, but I’m always interested in new things. It sounds like there are advantages to each system, but I may need to try out EE and see what I like about it.
dvessel 27 January 9:22pm
What about revision control, a corrupted database or doing a multi-file search and replace? Storing it in the database sounds nice for end users with basic needs but it does seem limiting for more complicated jobs.
I’ve never used EE. I’m primarily using Drupal. It’s not perfect but that kind of practice is frowned upon. The separation of the theming layer is enforced heavily. It is the first CMS I really learned to use so seeing how others approach it is very interesting. Thanks for the write-up.
Chris Basnight 27 January 9:48pm
We edit the template files with Textmate much like Mike above and use Subversion to protect against “accidents.” We put template files, style sheets, scripts and site graphics in our repository for each EE site. It adds a couple of extra key strokes to updating the site, but allows multiple designers to work on the site simultaneously. EE also includes a fantastic database backup feature in its utilities.
Expression Engine is capable of handling very complicated sites if explored thoroughly. One only has to look at the Ellis Lab site to see how a complex site can be managed.
PXLated 27 January 9:54pm
dvessel…“The separation of the theming layer is enforced heavily.”
With EE, content and presentation, separation or conjoined, is totally up to the developer. Mine are always totally separated. EE also doesn’t force a coding style on the developer, it can be as messy or as standards compliant as the developer is capable of.
George 27 January 10:02pm
One concern I have seen raised about EE is that it doesn’t seem to support meta tags — at least the EE sites my designer looked at didn’t seem to have them. Any comment on this?
Nick Valvo 27 January 10:26pm
Is this really so different from Textpattern — which also has its templates in the database?
dvessel 27 January 10:38pm
Chris, so a separate copy for each template in subversion? That can be a lot of work and requires a very consistent workflow. Something I would screw up for sure. :)
PXLated, I meant how the defaults are dealt with. Bad choice of words on my part. Developers can do what they want but it can be so complicated that if they don’t keep that separation, it will eventually bite them hard.
I just noticed that EE is a commercial product so their goals are very different from Drupals. Best not to compare the two.
George, meta tags are passé. ;) I don’t believe most search engines even considers them.
Leslie 27 January 10:42pm
George, of course EE supports meta tags. Since meta tags are HTML its really up to in how you want to implement them. There are a number of approaches, it simply depends on what you want to accomplish on a specific project.
Jeff Croft 27 January 11:16pm
Good stuff, Sean. Thanks for the overview!
Here’s the thing I’ve never been able to get a clear answer to on the topic of EE: can you create relationship between the “database” (weblogs)? For example…
Say I create three “weblogs”: one called Chefs, one called Recipes, and one called Cookbooks. Can I make a Cookbook contain multiple Recipes? Can Recipes have a field called “Chef” that relates it to the Chefs “weblog”? Can you follow these relationships in templates? For example, if I’m dealing with a Cookbook entry, can I do something to the effect of (this is pseudo-code, obviously):
Creating these sorts of relationships between items are what originally drew me to building CMSes in Django (which isn’t a CMS, obviously — so it’s learning curve is much greater than EE). Can you do this sort of thing in EE? I’ve always wondered, but whenever I ask someone, they tend to look at me with a blank stare. :)
I have a great overall impression of EE, even though I’ve never used it. It definitely seems like the cream of the crop in the off-the-shelf, all-purpose CMS department to me — but if it can do these sorts of relationships, that makes it all the better!
Sean 27 January 11:28pm
Jeff, yes, you can create relationships between “weblogs”, but I’m not sure they’re as flexible as you might require — and I don’t have personal experience doing so.
Hamish M 27 January 11:32pm
Excellent article Sean, and very informative. EE has always intrigued me, but I haven’t yet had the oppurtunity to take the plunge. I’ll keep this article in my bookmarks for sure.
Jeff raises a good question, I’d like to know the answer as well.
Ron McElfresh 27 January 11:39pm
We’ve used EE since it was beta in early 2004 and Mac360 was one of the first Mac sites to use EE. The flexibility, power, scalability, dependability, and security of EE, especially the template system, cannot be understated. This is a superbly crafted content management system backed by a talented development team and a first rate support operation. If you want a point and click and launch web site that looks like every other site on the Internet, stick with WordPress, Joomla, and others. For a scalable, fully customizable site, with an unparalleled suite of integrated features, look closely at ExpressionEngine. Developers of commercial, personal, or non-profit sites have plenty of choices for site ‘engines.’ EE is one that should not be overlooked. Mac360 started as a personal blog for a friend using a beta of EE, and went full time as a popular and growing site shortly after the official launch. The EE installation began on Mac OS X Panther using a sunflower iMac, then to a PowerMac, then to a couple of Linux systems, and finally settled on an Apple Xserve. EE handled every move with ease. We love working with content sites that use EE.
Mark 27 January 11:49pm
Re: templates in a textarea field, it’s not so bad to keep a TextMate window or two open and copy and paste in and out before saving them back.
mike_drechsel 27 January 11:52pm
Jeff,
On the issue of relationships between different “weblogs” in EE . . . You can implement these relationships without very much trouble. For instance, on a particular radio station website I worked on, we created a Upcoming Concerts weblog (or section of the site, anyway). Obviously, each concert will be played at a particular venue. Instead of requiring that the venue info be manually added to each show, we created a separate Venues weblog (or section), which contains information about all of the local venues that artists might play in Salt Lake City. When publishing a new Upcoming Concert, the person adding the show need only select the venue from a drop-down list and all of the info from the Venue section automatically gets pulled into the Upcoming Concert entry. It isn’t too complicated. Like Sean, I’m not sure that is as flexible as you are describing with Django, but it certainly hasn’t limited me in any way up to this point.
Here’s info from the EE Docs which might explain it better:
Relating Entries in EE
Jeff Croft 27 January 11:56pm
Thanks for the responses, guys! That’s awesome that EE can do some relationships between “weblogs” (I have to say — the fact that they’re called “weblogs” really bugs me! :). I looked over the documentation for it, and it definitely doesn’t seem as flexible as you’d get from a object-oriented framework like Django or Rails, but it looks like it’d be sufficient for most people’s needs, and it’s a whole lot easier to learn, to boot. So, very cool. One more reason that EE definitely bests the WordPresses and MoveableTypes of the world by a very wide margin.
Jaime J Aleman 28 January 12:56am
> JeffCroft:
> the fact that they’re called “weblogs� really bugs me!
Don’t worry, you can change the title of ‘weblogs’ to anything else. I personally prefer to use the word ‘section’. There is an option of the Admin Control Panel that allows you to edit that.
Don’t like the DASH as a work separater in your URL? You can substitute it with the underscore.
You want caching? The option is built in :)
What about membership specific pages? DONE!
What about 3rd part plug-ins/extensions/modules? Accepted!
Want to build a photo gallery? DONE!
How about MoBlogging? RSS? Wiki? All DONE!
And for anyone wondering about page validation. Is it XHTML strict? Transitional? EE can output pages based on what YOU the developer code into the template.
So you and you alone are solely responsible for your page layout, structure, design, validation, etc.
Showcase here: http://expressionengine.com/showcase/
PXLated 28 January 1:28am
In addition to Relationships, there’s Reverse-Relationships.
And don’t forget there is somewhat of a companion EllisLab product (php framework) called CodeIgniter for you heavy duty dev types.
Arden 28 January 1:48am
dvessel: EE supports revisions for both templates and entries. You can specify for both the number of past copies you want to keep (though I don’t think this works with templates saved as files).
Jeff: Not only does EE support relationships as Mike described, but it also supports reverse relationships. The difference is something like this:
It’s like the difference between people coming over to your house and you going over to someone else’s house.
As far as browser-based templates, this is what TextMate’s “Edit in Textmate…” command is for. This isn’t a perfect solution, of course, nor is saving templates as files, but they work well enough to get the job done.
One other thing the original article didn’t mention that is a big draw for ExpressionEngine: it supports multiple distinct websites with one installation of the EE software. With the Multiple Site Manager, it’s exceedingly easy to create more than one website that share the same membership directory, common elements (through embedded templates), and more. It fully supports multiple domains and subdomains, too, so you’re not limited to just one URL.
Jeff Croft 28 January 1:53am
I guess I just assumed if it supported relationships, it’d support reverse-relationships! Would be pretty silly not to!
Now, if only it weren’t PHP… :)
Kelly Sims 28 January 2:24am
Great write up. I’m a huge EE fan. I’ve been using it as my sole CMS (well, for projects that require it) for two years now. I often find that with each new project I tackle with EE, I find out new and better things it can do. It’s a pleasure to work with.
I also agree that the templating system is probably the biggest new user hurdle. When friends ask for help, it’s this area that usually has them flummoxed.
I do have one quibble with EE, and that’s the membership module. While it’s fine for basic membership stuff, it’ doesn’t work when you need to tie members together with section entries. I’m hoping the upcoming 2.0 version will have a more robust membership system, or at least integrate with the section entries better.
Oh, and the church site is really top notch. Bookmarked that one awhile back for inspiration!
Steven Birch 28 January 2:27am
“Now, if only it weren’t PHP… :)”
Yeah, but hard not to use php when its still the most dominate/available web application language in the web hosting world. Gives you a much larger market to provide your application to, maybe not all that important for open source projects, but a tad important if you are selling a product. ;)
Arden 28 January 2:44am
Unfortunately, there are a couple exceptions to this. EE contains some built-in snippets of HTML for certain types of output that sometimes break in validation. One example of this is the output sometimes generated by the file upload link; I’ve run into pages that don’t validate because they contain code like this. There are some other examples.
That aside, however, what Jaime said is pretty much true.
Kelly: Agree on the membership module. There are a number of threads on the EE message boards requesting better membership options, especially for the templates.
allgood2 28 January 3:05am
Actually storing it all in MySQL data tables makes EE incredibly flexible, and I found more suitable for our more complicated jobs.
EE handles revision control both at the entry and the template level, allowing you to specify the limits on retain revisions. When I’m in development mode, I go for pretty high numbers 50-100 revisions saved (for templates), since an hour can produce 10-20 revisions rather rapidly for me. But once the site is live, I typically scale back to 10 revisions, since that can store a month worth of changes.
For articles or entries, I tend to set based on the client, anywhere from a low 5 to a high 25 revisions. Most of our clients do most of there editing offline, so typically their revisions consist of major changes to the article, not minor spellchecking items (though that does happen).
Search and replace functions can be employed site wide or with specification. The function is very powerful, so comes with the appropriate warnings. But you can search and replace at the template level, across multiple template groups, and or at the entry level.
I’ve been using ExpressionEngine since it came out and continue to be surprised by how flexible it is. There’s always something more to learn and functionality that you’ve used for awhile can all of sudden provide provide more inspiration and options than previously imagined. It’s been great for us and our clients, who find they can now just update their sites without thought to structural issues.
Josh N. 28 January 3:42am
What’s the deal with the `index.php` in the URL all the time? I see you don’t have it. Are you using the unsupported method" to remove it completely? I’m wondering how much of a big deal it is to remove that pesky thing. It’s sad, but that’s something that is keeping me from wanting to use EE.
Sean 28 January 3:53am
Indeed. I’ve just used the “Find and Replace” utility to correct where I’d mistyped “ExpressionEngine”, putting a space between the words — on my entire site. Took me all of 10 seconds.
Yes, I am — at the cost of not being able to serve a proper 404 error page. It might seem like a trivial and vain thing, but clean URL’s are very important to me. (I’ve heard a supported method for removing “index.php” is coming in version 2.0.)
allgood2 28 January 3:54am
The index.php file handles, well almost everything in relation to the front end of the site so it’s important. But yes it can be renamed or removed. Renaming is the easiest method and works across all systems, but removing can be done as well, but is typically system dependent.
I’m a big fan of the File & Directory Check Method, which uses .htaccess to check to see if a physical file or folder exists on the server before calling EE. But when that fails, as it has on a few client server’s, I go for the exclude method. I just don’t like the include method, it’s way more likely, that I’ll forget something that needs to be display, then it is for me to forget the few items, I never want displayed.
But for clients, if I have access to their server when doing mock-ups, etc. I’ll always run a check to see if the .htaccess File & Directory check method works, if so then I give examples with urls that don’t include the index.php. But if it doesn’t, I’ll typically start with a name change, and make the file something more specific to the client.
Josh N. 28 January 4:10am
It seems that the File & Directory Check Method works for me on my server (Dreamhost)! :-) Thanks.
I have no idea what how that bit of code in the .htaccess works, but I guess I can live without 404 pages.
Arden 28 January 4:24am
What do you define a “proper” 404 page as? One served by the server instead of by EE? The built-in methods for serving 404’s in EE work just fine for what I do.
Ron McElfresh 28 January 4:31am
Regarding EE’s use of “index.php” in the URL string— it’s there as a default, which is common among many CMS applications, though not a requirement provided workarounds are available (Apache) on your server or host. However, “index.php” in the URL string is a non-issue for users and search engines. Search engines don’t care one way or the other, though EE adds keyword density via the match to link and headline. For the most part, users seldom enter a full URL by hand these days, so what difference would it make other than aesthetics whether or not a URL contains “index.php?” Not much. Should EE 2.x come up with a way to remove it completely, fine. If not, there’s still no harm except to the obsessive compulsive among us. .htaccess is not equal across all Apache systems so be careful (should the need arise to move from one host to another).
Ditto from me on the other posters regarding Member issues and non-totally valid XHTML here and there, but they’re nits. The EE template system is a work of art.
Sean 28 January 5:06am
No, I’d be happy a template in EE since it could be made to server a proper 404 HTTP header. Unfortunately, after an upgrade to PHP 5 and Apach 2.2, the mod_rewrite trick fails to work properly unless I disable the custom 404 preference (both in path.php and Global Template Preferences). It’s something I’m still troubleshooting, actually.
Mark Bowen 28 January 5:41am
Just wanted to point out that this link really is only ever going to be on pages that are accessible to users who are posting on the site anyway and shouldn’t really be a problem to people who are just reading items on your web-site but that’s just a personal thing really.
A nice article but I have to agree that I think it is a bad idea to change the word weblogs to databases as they aren’t really that at all. Add to that the fact that EE does indeed work off a database anyway then this might start to confuse people.
I personally just keep it as weblog but if you really need to then you can change it to something like sections instead if it is easier to understand what is going on. I think once you have used EE for a while then you actually forget whatever word you are using anyway as you just know what everything does and where it is too.
Another thing (and this is entirely a personal thing) I think that going into explaining a system too deeply such as saying that the system only ever uses the index.php file can be a little misleading if you are trying to get people in on using the system. I don’t really think that people need to learn all the back-end code to be able to use the system. I think it is best to just get people going with the system and after they have learnt the basis then they will look into this for themselves anyway as most people are naturally curious anyway! :-)
I in no way meant the last paragraph to sound like I was having a go but merely as I see this great write up as something that will hopefully entice new users into the fantastic realm of EE I think that it should possibly be kept a little simpler perhaps?
I always like to think of teaching a system in the easiest way possible. The other day I was teaching my mom to use a word processor of which she has never ever used a computer before in her life. In the end I used the analogy of writing on paper and picking up pieces of paper in her hands to reflect copy and paste. After that she had it. I think that it doesn’t matter how you learn a system as long as you understand it in a way that works best for yourself.
Anyway, a really really good write up and I am sure that this will get some more much deserved credit for EE so well done on this.
Best wishes,
Mark
Arden 28 January 5:48am
What I was referring to was the link on the entry page to insert, say, an image into an article, which is seen by anybody who reads the article. I’ve had validation trouble with articles that use code from this, which is not something I’ve really bothered to fix.
Definitely, especially being linked from Daring Fireball. Just look at all the comments in just two days!
Also, Sean, what are you using for this live preview? Pretty nifty.
Mark Bowen 28 January 6:29am
Hiya Arden,
Sorry I think I must be misunderstanding what you are referring to probably. Not wanting to take away from the great write up here but do you mean the formatting buttons when you are in the EE backend panel? If so then I believe that you can make those spit out whatever code you want for your own usage so this should be able to be fixed quite easily.
Best wishes,
Mark
Steven O'Neill 28 January 7:50am
Jambor-ee is down at the moment :(
allgood2 28 January 10:53am
Hi Arden- Are you talking about when you upload an image or file and EE creates the insert tags?
I have to say, I don’t often use or have client’s use the auto-insert code. Possibly my control freak tendencies. If I have a field to place an image or an upload in, then I also have the code necessary to check if the image or file exists and to point to where it should be on the templates. Plus, that allows me to check on things like width for display purposes. I’ll often adjust if an image floats left, right or center based on the size of the file. I tend to like smaller images to float right.
And since I haven’t said it yet. Great article Sean! I always enjoy reading about EE, and the City Church site is one of my design favorites.
The one item in the comments that I’ve read, that I agree with is that it’s probably not a great idea to call the weblogs, databases—at least not in the backend of EE, where you can rename them (though it didn’t sound like that was what you were doing to me. It sounded like you were providing a way for developers to talk about the system to clients).
That said, I should mention, I too started telling clients that they could think of weblogs as databases, and soon recognized that I should change that to datasets, data-tables, forms or containers. When talking, I often use the datasets terminology, though in the backend, I use ‘section’ a lot. But this is part of the design or infrastructure component for me, since for primary datasets I try to match the shortname with the template_group name so clients really just think they are placing data in a section of the website and logistically it flows.
Arden 28 January 11:08am
allgood2: Yes, that’s exactly what I mean. We use the code generated by the upload link frequently, then wrap it with positioning code, so I get quite a few less-than-standard pages.
Scott 28 January 11:20am
I’m 90% thrilled with EE, and recommend it to anyone seeking a flexible, user-friendly content management solution. For front end geeks like myself, the ability to control the XHTML markup is a dream; the code on my site still validates (except for those pesky ampersands in my Flickr feed).
To provide some constructive criticism – there are a few templates (the member page for example) that are a nightmare to edit. They are the complete opposite of the experience of editing the other page templates. Hoping this will be remedied in 2.0.
Sans 28 January 12:13pm
Expression Engine is a great product and I’ve used it for a fairly large site – it’s great to work with and outshines many of the other lightweight CMS options. The support forums are also quite good. I’ll continue to use it for well-funded projects.
Unfortunately the license of the core (free) version is prohibitive as it doesn’t allow any for-profit sites. Now I work on more entrepreneurial sites/blogs for independent writers that take time to generate a profit and are often built on a shoestring. I’ve had to use wordpress on these projects where I would have preferred Expression Engine simply because they were for-profit. Once those sites ‘grow up’ on wordpress and start turning a profit, it’s a big deal to port them to a new CMS. In such projects, I would love to use a free version of EE to see how well a site/blog does risk-free and then upgrade to a pro-version to grow the site. It’s easy to tell a client/partner – “now that we have so much traffic and ad revenue, lets pay the $200 and add a forum and formal support”. It’s hard to say “lets start all over” with a new CMS.
James Hatfield 28 January 12:16pm
Anyone looking for a GPL CMS which has the features described herein should take a look at ModX CMS [link]http://www.modxcms.com[/link].
I haven’t used EE before but from the description ModX is as powerful and flexible (if not moreso) and recently received the Packt Most Promising CMS award.
I’ve used it on 20+ sites now and can vouch for it’s efficacy.
PXLated 28 January 12:28pm
But James, if you haven’t used EE, there’s no way for you to know.
Jaime J Aleman 28 January 12:50pm
> James Hatfield
> Anyone looking for a GPL CMS which has the features described herein should take a look at ModX CMS.
Rocks to Apples. Apples to Oranges. Oranges to Orangutans.
What you are doing it comparing two totally different CMSs.
Because EE is NOT all free, the price associated with it pay for the support. True you can get support for WordPress, TextPattern, ModX, etc. … but when you pay a premium, you get the premium.
Ryan Masuga 28 January 10:58pm
I use EE exclusively (after having used Wordpress or {shudder} hand-rolling {/shudder} sites for most projects) and one of the best things about EE is the support. I think the forums are the most helpful I’ve ever seen or used.
The cost of a license became a non-issue real fast once I saw how fast I could develop a site, and how quickly I was able to get help – or even write my own extensions, modules, and plugins. And most businesses – at least the ones I do work for – don’t bat an eye at $200.
I look forward to meeting the EE gang at SXSW this year!
BW 28 January 11:48pm
> James Hatfield
MODx is more than a CMS, its a CMS Framework. Like EE and Code Igniter put together.
Casey Bombacie 29 January 1:51pm
We also are moving to EE, while we are still under massive construction. GC Socal I love it. It’s far easier to use than other CMS’ I have tried.
tz.Creative.Planet 29 January 5:15pm
Some mind-blowing techniques here; multiple databases, top secret hidden preview access.
I can only say “Wow”… If and when I ever catch up with some of this stuff it’s going to be so-o-o …c-oo-l!!
“An Introduction to ExpressionEngine”
0 minutes ago on EE Blog
If you’re looking for a reason to invest some time and effort into learning and installing ExpressionEngine, keep reading. “
Brian Warren 29 January 5:45pm
Sean thanks for the post here and for introducing more people to EE. I use it pretty much exclusively for all my development. For anybody who is balking at the price or is concerned their clients will balk at the price. Ask yourself this – do you really want to work for a client who can’t afford $250?
PXLated 29 January 5:59pm
>> do you really want to work for a client who can’t afford $250? <<
B I N G O !
Sans 29 January 6:29pm
>>> do you really want to work for a client who can’t afford $250? <<
>B I N G O !
I totally get it. But I can quickly build a basic, standards-compliant, secure blog/small site in both Wordpress (for example) and Expression Engine. I don’t want to be that web guy that commits the client to a software purchase and ongoing licensing based on my personal style preference regardless of business needs. Sometimes free and simple are just the ticket.
To reiterate my previous comment – I really like Expression Engine. I just wish they competed at the free level with a less restrictive license.
Kurt 29 January 6:49pm
Before joining the EllisLab team this month, I ran my own web firm for a few years.
Another thing to consider, and one of the things that frequently doesn’t enter our minds much when we considering CMS’s is what happens when its time to update the CMS.
My firm has launched over 100 EE sites. We’ve also updated over 100 EE sites, some of them three or four times a year, and we’ve been doing this for the last four years or so.
If you are smart in creating a site in EE, you can update to a new build and/or version in under 15 minutes, start to finish, including database backup. Our typical site down-time during a full-version update is under 60 seconds, so we can do updates in broad daylight.
If you’ve updated many CMS type sites based on other CMS software, there’s a good chance you’ve got a story or two to go with each of those updates, especially if it was a feature-rich site. That hasn’t been our experience with EE.
When you’re considering your CMS options, ask a few developers who use that CMS frequently, what it would cost to update one of his or her older sites from his or her portfolio, and how long it would take. I would be wiling to bet it will take them longer than 15 minutes.
EE is so stable between versions, that we include EE software upgrades as a “value added� free service to our clients.
Kirk Franklin 29 January 7:30pm
You can use PHP in your 404 template to send a proper 404 header.
PXLated 29 January 10:45pm
>> I don’t want to be that web guy that commits the client to a software purchase and ongoing licensing based on my personal style preference regardless of business needs. <<
But yet, your willing to lock them into a walled garden, with limited options to move forward?
Scott B 30 January 2:32pm
Wow. Thanks.
Terry 3 February 6:31am
I certainly appreciated that the “ongoing licensing” to update several years after buying v1.3 to update to 1.6.1 only cost me a mere $25! (personal use license renewal)
EE can go as deep as any client could ever wish to go, and is totally extensible through custom plugins, extensions and full-blown modules, all with great documentation that is additionally appended and added to by the user community through wikis, forum posts and additions to the documentation. Add PHP in templates, a query module, and dynamic forms and you have a heck of a lot of power to play with!
Terry 3 February 6:34am
Did I mention embedding templates inside of other templates? No?
Embedded templates!!!
Charlie Stout 12 February 3:48pm
I just have to second the comment on the Expression Engine user forums. I have yet to find a more helpful, passionate community of developers and users. Dem’s good peoples.
Graham Smith 19 February 9:15am
Wondeful and incredibly useful article.
I have only been a short term user of Wordpress, with a few Blogs under the belt.
My feelings have always been that Expression Engine could provide a more powerful and unique user experience. I first started contemplating EE after reading Simon Collisons bit in the book Blog Solutions. But for some reason I drifted towards Wordpress late last year.
So for me WP is still very new but I am still having thoughts of trying Expression Engine before get to deep in Wordpress.
I guess my very general question is, if you have had WordPress experience, how would you say that Expression Engine compares to a relatively newcomer like myself.
Please, I am not looking for a direct comparison, I know how impossible that is. What would be great is a simple, ‘yes, EE would be a viable alternative to Wordpress and would be worth investing time learning.’ Or not! :0)
For me, due to personal reasons, I left my full-time job and now using my time to learn more about Web Development, PHP, CSS etc. But my time is still very valuable to me, I hate wasting time so for someone to say to me knowing EE would be a valuable skill to have, say over WP would be really helpful.
I think part of of is that I always, for some reason, also like to be a bit different from the crowd. Obviously WP is hugely mainstream and well supported, but I know that EE is also incredibly popular with the people who know and Simon C did a very good job at singing its praises.
I guess to sumarise, I want to learn something that will be of value to me in the professional sense.
Sorry for the rambling message, but this article has been really interested and has really got me motivated.
PS: NOt sure if you were aware but on Firefox, your version of CATCHPA seems to overrun the input text field, so you can’t see what you are typing. :)
Graham
ImJustBlogging
“Web & Blog Ramblings from ‘my’ Gutter”
Arden 19 February 4:13pm
Graham: I’d say if anything, it’s worth knowing how to use ExpressionEngine because of the EE job board. Companies and individuals post EE-specific website jobs of varying levels, and if you find the right one(s) you can make some good money off it. I’m guessing there isn’t anything like that for Wordpress.
Graham Smith 19 February 7:04pm
Hi Arden,
Many thanks for your super quick reply!! :)
I was sort of expecting you to say that, which confirms some of things I was thinking and have heard elsewhere, namely Mr Collison.
Going to download the ‘core’ module tomorrow and start tinkering. I was hoping for some printed book, but seems you have to look online for specific resources.
And as I am writing this i see that you can order a printed book of Boyinks tutorials. Great Stuff. Seems I will be underway soon.
Thanks again for a great article, have also been reading your other posts so all subscribed up. Good choice with the MacBook Pro. A wait in this case could well be worth it. I have last years model but still suits me just fine, still a wonderful machine.
Best
Graham
ImJustBlogging
Michael C. 31 March 5:19pm
No way. This is wild. :)
A couple of years ago, I had just launched a TextPattern site for my church . TextPattern was fine for our needs at the time, but due to an inability to come up with a design that everybody liked, I ended up having to throw together one of those bland, uninspired last-minute designs that nobody hated, at least.
A few months later, I ran across GodBit , and through it , The City Church’s website – a design that caught my eye and never let go. So subdued, pleasing, and unified… yum. I was so focused on the design of their site that the mention in the article of their being powered by EE went in one eye and out the… other… err… yeah. I wasn’t interested in a new CMS at the time, okay? Anyway, I didn’t remember that EE was powering the TCC site.
I toyed with possible redesigns for our site over the years, always referring back to a number of sites – the TCC site among them – for ideas and inspiration. I even implemented SlideShow Pro and those delectable Silk Icons into our website, but that basic uninspired design still refused to go away.
Fast forward to a few months ago. With a renewed vision for the possibilities and importance of the Internet, the time had (finally!) come to redesign our site. “Great!” I thought. “I can get us a nice-looking design finally – perhaps something similar to The City Church’s site!” Simultaneously, I wanted very much to find an alternative to TextPattern, which we had outgrown with all the things “they” wanted to do. So I investigated the various CMS options on the market, narrowed things down to Joomla and EE, and finally decided on EE.
In the meantime, I had, of course, totally forgotten that TCC was powered by EE.
Then I read this … Can anyone say, “full circle”? ;)
scott b 19 June 12:37pm
Anyone have thoughts as to hosting (Expression Engine)?
We currently serve sites from an in-house Windows/IIS box, but I’m looking at virtual dedicated for the performance plus configuration control minus dirty-hands-management (it gets REALLY old). We’ve ran in-house, production-level tests LAMP (CentOS then server-flavored Ubuntu), but again with the management…
Storage isn’t a primary issue, as I plan to keep the audio and video files in-house to eliminate transfer and space needs.
I ran a self-installed WordPress test on a shared hosting service I’ve had good experiences with (Dreamhost) and the performance was utterly pathetic.
Anyone?
Kurt Deutscher 19 June 12:46pm
In a word (or two) EngineHosting
Natalie 22 June 7:53am
Excellent article Sean
Comments for this entry are closed.