23 December 2007

Thoughts on ExpressionEngine 1.6.1

I spent the week after finals putting together a support site for a friend's company. His company chose ExpressionEngine version 1.6.1 as the underpinnings of the support site. I'd never used it before, and here are my thoughts on the system having stared at it for a week straight:

ExpressionEngine Pros

ExpressionEngine had a lot of good things to offer, and I can't imagine having completed as much of the support site as quickly as I did without it:

Simplicity of the Templating System
From looking at the shipped, default templates it was straightforward to learn ExpressionEngine's template syntax. Tags come in {single} instances and in {pairs}{/pairs}. Compared to all the JSP line noise I've used in the past (e.g. <%jspTag%>) it was nice to have a bracket just require a bracket.
Flexible URL Parsing
Within any template, it's possible to extract URL segments to dice your incoming URL into manageable pieces. In the knowledge base we had URLs like knowledge_base/category/category_id and we pulled them apart with ExpressionEngine's {segment_#} construct. That was the only place where surgery was required. The rest of the time the URL parsing just worked and I didn't have to think about it. Within the bug tracker pages, I could request a single bug using URLs like bugs/bug/bug_id or bugs/bug/bug_title. I could see all the current bugs using bugs/bug/ with no trailing identifier. The underlying page to do both was identical, and ExpressionEngine handles the URL details automagically within it's underlying Weblog Entries and Comment handling tags.
Search Capabilities
ExpressionEngine has a great Search Module that makes it simple to search across all the content on the site. I doctored the example Simple Search Form provided in the documentation to automatically search across all entry text and titles (default is just titles I believe) and to provide AND semantics for multiple keywords. The advanced search form was also easy to tweak to get good defaults set. After configuring the Excerpt setting I could get a snippet of each search result using {excerpt}. I needed {exp:word_limit total="25"}{excerpt}{/exp:word_limit} to keep the results page from getting too lengthy.
Flexible Entry Categorization
Though the system allows hierarchical categories (e.g. category Sub-A is underneath category A) any entry could be filed under multiple categories simultaneously and subsequently accessed from any of them. For the knowledge base this let us put answers to questions in multiple places, and gave us a navigable ontology for people to use.
Funky Characters and Escaping
While entering fake articles for testing, I got bored with regular lorem ipsum greeking and decided to use some actual greek characters. The system handled it without a hiccup.
Great Public Support Site
The ExpressionEngine Support Site is top notch. Be sure to search both the forums and the knowledge base when you're digging for information.

ExpressionEngine Cons

With the caveat that these issues are likely fixable but just difficult for the uninitiated, these were my gripes about using ExpressionEngine:

Lack of Formality in the Templating System
I ran into odd problems when I tried to use nested conditionals, and I never could find what I'd call a "language reference" that'd give me a definitive answer for what works and what doesn't. Basic control structures were hard to read about because they've been given wacky names, e.g. this {if something}{/if} is an if statement not a conditional global variable. The ExpressionEngine template documentation lies somewhere between an extended example and a thin, wordy book sorely in need of a good index. There is a quick reference but it looks like you'd expect for a PHP-based system— lots of variable/tokens in a laundry list with little semantic/syntactic context. I prefer working from dense, highly structured references like O'Reilly Media's Nutshell Series and Visibone's Reference Products.
Breadcrumb Navigation and/or Advanced Category Functionality
Within our knowledge base, we wanted to provide a breadcrumb trail for how the user navigated into the given article. That would let the user back up by category if he or she got too far in. Unfortunately the ExpressionEngine documentation and knowledge bases keep mum while the forums are littered with poor information on creating breadcrumbs. The consensus there is that a one-size-fits-all breadcrumb mechanism doesn't work, and that everyone generally needs to roll his own. Okay. But, the existing category support tag doesn't answer questions like what-is-the-parent-category-of-the-current-subcategory? (or, if it can, the documentation isn't giving up its secrets lightly) and so we had to roll our solution by querying directly against the underlying database tables.
No External Member Registry
Since we were creating a support site for an existing user base, we wanted to use login information from our application to provide user accounts for the ExpressionEngine-based site. No dice. There are import mechanisms, but they run the risk of drift/synchronization issues over time. External user registries are apparently possible but wholly unsupported. The hacks the friend put in place are working but temporary to say the least.

I've got some other minor nits, but they are of the I-didn't-expect-it-to-work-that-way variety and wouldn't matter if I spent a second week using the product.


ExpressionEngine is a good product, and I'd choose it if I ever have to roll another site.

Random Tips

When alternating CSS classes in an HTML table, don't look for a modulus operator to write something like {if count%2}{/if} to use in conditional statements. It doesn't exist. Instead, use the {switch} variable.

Put your templates on the filesystem otherwise you're going to edit everything from within an HTML <textarea>. That's painful, especially if you want to want to use external source control and/or you've invested time in becoming proficient with a text editor. If that's not an option, the Firefox It's All Text! extension will help dull the pain.

When you create a new weblog, be sure to associate the "Default Status Group" with it right away (i.e. EE Control Panel > Admin tab > Weblog Administration > Weblog Management > Edit Groups). If you don't trying to use a Stand-Alone Entry Form will mysteriously cause all new non-SuperAdmin user posts to have "Closed" status no matter how you fight with it. After two hours of muttering under my breath, I gave up and read the source code only to find// if there is no status group assigned, only Super Admins can create 'open' entries. Not assigning a status group causes your weblog to have "Open" and "Closed" status available, which is identical in behavior to having the "Default Status Group" assigned save this nasty catch.


Unknown said...

Hello, sir:

I am developing an EE site and find myself in the same boat as far as External Member Registry is concerned. I would love to find out your temporary solution. We are willing to pay for anyone's time towards that end. Thank you in advance.

Mark McComb

Unknown said...

Hi Mark,

I'm afraid it was hackish enough to not be repeatable. Best of luck finding a solution to the external member registry problem.

- Rhys

Subscribe Subscribe to The Return of Agent Zlerich