Over the years , I've used quite a few of these content management systems, in addition to building a variety of custom solutions using tools such as the Zend Framework. Both approaches have their drawbacks, with the former never seeming to offer an adequate level of flexibility while the latter requires a great deal of redundant coding and long-term maintenance. Granted, neither approach is intended to cater to every desire, but can you blame me for wanting such a solution anyway?
Indeed, I concluded that no solution effectively offered both the fundamental features of a content management system and the flexibility of a web framework. However , after working with ExpressionEngine (one of the systems I recently highlighted in my article "The Top Five PHP Content Management Systems"), my opinion on this matter has fundamentally changed. Using ExpressionEngine during the past few months on a major project that involves a great deal of multimedia and downloadable content, an existing membership base numbering in the thousands, and a complex e-commerce configuration, I'm starting to believe perhaps you can have your cake and eat it too.

ExpressionEngine Defined

Although ExpressionEngine is considered the latest significant entry to the crowded PHP content management system market, the company behind ExpressionEngine is anything but inexperienced when it comes to developing powerful software. In fact, EllisLab is the creator of pMachine, which was one of the first PHP-driven content management systems and was the precursor to ExpressionEngine. They also created and lead the CodeIgniter project, one of the world's most popular open source web frameworks. However, you don't need any prior knowledge of CodeIgniter in order to begin using ExpressionEngine, or even of PHP for that matter. You can build a fairly powerful web site using the content management tools made available through its web-based interface.
ExpressionEngine does differ significantly from other leading PHP content management systems in its licensing. Although a free version is available (known as the Core License), you can use it only in conjunction with "personal, non-commercial, and non-profit activities." For commercial purposes, you'll need to purchase a commercial license, which currently runs $249.95. Frankly, I found this a small price to pay given the significant time that key ExpressionEngine features saved me. These features are discussed in detail next.

Key ExpressionEngine Features

Hundreds of features are bundled into ExpressionEngine (itemized here), however I found a few particularly striking as compared with what other solutions offer.

Intuitive Content Management

ExpressionEngine treats all content as a Weblog, pure and simple. Therefore, if you were tasked with creating a site that cataloged information about books, DVDs, and video games, you would probably create three Weblogs, one for each product type. Of course, each Weblog would consist of custom fields specific to the content it tracks. For instance, each book entry would probably contain fields used to represent the book's title, ISBN, author, page count, publication date, price, and table of contents. ExpressionEngine allows you to easily customize these fields for each Weblog, defining not only the field title but also the type of form control that should be used to manage the data. Figure 1 depicts just such a set of fields for a book-related Weblog.

ExpressionEngine Enhances PHP Content Management with Framework Flexibility
Click here for larger image

Figure 1. Customizing Weblog Fields

A Flexible Templating Engine

When you've defined the Weblog fields and added a few entries, you can create the templates, which will format each Weblog entry within the web site. This is accomplished using a highly intuitive template engine, which allows you to refer to the Weblog field names (see Figure 1) within your templates, as demonstrated below:
<div class="book-summary">
  <img src="/images/products/{segment_3}.png" />
  <h3>{title}</h3> 
  <p>
    <b>By</b>: {authors}<br />
    <b>Publication Date</b>: {entry_date format="%F %d, %Y"}<br />
    {if isbn != ""} <b>ISBN</b>: {isbn} <br /> {/if}
    {if pages != ""}  <b>Pages</b>: {pages} {/if}
  </p>
  {summary}
</div>
Rendering this template to the browser produces output similar to Figure 2.

ExpressionEngine Enhances PHP Content Management with Framework Flexibility
Click here for larger image

Figure 2. Rendering an ExpressionEngine Template
These templates are managed within a web-based console (see Figure 3), and can be easily configured to rely upon a unified page header, footer, and context-specific sub-templates, such as sidebars.

ExpressionEngine Enhances PHP Content Management with Framework Flexibility
Click here for larger image

Figure 3. Managing ExpressionEngine Templates Through the Web-based Management Console
Finally, if the native template tag capabilities don't suffice, you are free to integrate both PHP and custom SQL queries into your templates, stretching the boundaries of content management as far as you'd like them to go.

A Vibrant Extension Ecosystem

The ExpressionEngine web site currently lists 142 official plugins, modules, and extensions, with hundreds more available for download from third-party web sites. Among others, you'll find plugins capable of communicating with the Amazon Associates API, integrating Flash, adding RSS feeds, providing members with a wiki, enhancing content search capabilities, and much more. If you're in need of e-commerce/shopping cart integration, check out FoxEE, an ExpressionEngine add-on that tightly integrates with the FoxyCart-hosted shopping cart and checkout service.

Powerful Member Management Features

These days, almost every site offer s some level of membership-specific services. However, building and maintaining an infrastructure capable of managing large member bases can be incredibly time consuming. ExpressionEngine removes many of these difficulties by providing you with native registration and login features, the ability to create custom membership fields, and the ability to communicate with users via a mass-mailer feature.
Other ExpressionEngine features also enable you to restrict content to registered members easily and even to assign members to specific membership categories, which make it possible to further segment content access.

The Future of ExpressionEngine

ExpressionEngine 2.0 is currently in beta and promises dozens of new features, including a native image editor, updated interface, native jQuery support, and improved management of third-party extensions. You can download a 30-day trial version of the public beta from the ExpressionEngine web site.

Conclusion

ExpressionEngine does a pretty impressive job of treading the fine line between offering users the stability of a content management system and the flexibility of a web framework. If other solutions aren't fitting your exacting needs, consider ExpressionEngine. As always, if you use ExpressionEngine in an upcoming project, or have something extra to add based on your prior experiences using this particular solution, please tell us about it in the comments!

About the Author

Jason Gilmore is the founder of EasyPHPWebsites.com and the author of several popular books, including "Easy PHP Web sites with the Zend Framework" and "Beginning PHP and MySQL: From Novice to Professional" (currently in its third edition). Check out his new DZone reference card, titled "Getting Started with the Zend Framework."