ExpressionEngine 3: Refreshed & Ready for Prime Time
Last month, a couple of us from GRAYBOX took a flight down to San Antonio to attend the 2015 ExpressionEngine Conference. Without a major version release since late 2009, I was excited to get my hands on the latest and greatest iteration of EE. The new version contains a few major updates, but generally sticks to the core and cleans up several areas that have been neglected for far too long.
- Control Panel refresh with a comprehensive style guide
- File Structure updates to support easier updates
- Multisite Manager is now baked in to the core code
- Discussion forums are now built in
- Spam detection and management system
- Model Service and Event Service
- New Relic Support out of the box
- Support for Redis, Memcached or File-based cache
- Updated profiler and debugger
- Removed the mailing list module
- Removed wiki module (although there's a note that they are open sourcing the module after compatibility checks are complete)
- Many minor adjustments to defaults, sample data, installers, programatic events and other settings to make the system cleaner and easier to use
I generally have two complaints about ExpressionEngine, the pricing and the control panel - and this update makes large strides in area of the control panel.
Refreshed Control Panel
Although they chose not to use a common framework such as Bootstrap, Foundation or Skeleton, their home-rolled framework is similar to many of the frameworks on the web these days - responsive, grid-based and consistent. The mantra by the Ellis Lab team during the demo was "consistency consistency consistency." Buttons that look similar should do similar actions...don't make the user think. Ellis Lab built out the refreshed control panel, and it's nice.
As you can see, the control panel is cleaned up and organized a bit better. No crazy new features or anything, just some general housekeeping by putting the action items on the left, the config on the right, and refreshed the blocks of content with some actionable pieces of information. The control panel is now fully responsive, so using your mobile device to make an update won't be as annoying.
File Structure Updates
Upgrading ExpressionEngine has been a bit of a hassle. Some fundamental file structure updates have separated out the core EE code from the third-party code and updates promise to be a simple drag-and-drop replacement of the core code. In practice, this went very smooth (I upgraded from 3.0.0 to 3.0.4 with no issues).
All ExpressionEngine Core files are kept isolated from the user folders. The user folders contain the templates, third-party add-ons, and all custom configuration. When you need to update ExpressionEngine, simply drop in the themes/ee and system/ee and boot it back up. The system automatically loads the installer, click "install" and you're good to go. Even the installer directory is cleaned up automatically in EE3.
"ExpressionEngine includes a Spam Module that allows you to block spammy channel comments, forum posts, and member registrations. The Spam Module includes a library that exposes spam classification to third party developers. The Spam Module allows you to mark content flagged as spam as false positive which it then learns from, allowing the Spam Module to be tailored to your content."
The spam module comes with a database of ham and spam values, and is configurable to work with your content because spam on one site is not the same as spam on another. The module learns based on your content and what you flag as good or bad. Function hooks are available to use in custom add-ons, as well as native functionality for Channels, Comments and Member modules.
From the updated documentation:
"ExpressionEngine has a complex set of data types, such as Channels, Members, Templates, and Categories. These have properties and constraints, as well as relationships and complex storage requirements. The model service helps smooth out interacting with ExpressionEngine’s data types by providing an API that mimics their natural language description as closely as is feasible. You do not query for channel_data joined on channel_titles; instead, you simply get a channel entry with its fields."
Models help to structure and give consistent access to data objects. Additionally, new models can be framed up quickly - although there is not a data builder like some other frameworks, you have to create your tables and fields, then map everything to the model in your add-on. This has huge potential for building out complex data types for web applications.
Unlike developer hooks, the Event Service is a broadcast of an event during the functional operation of an add-on, but closer to the code level without the need for an installation of a developer hook record in exp_extensions, or with the overhead of the extension settings. Simple broadcasts of events such as subscriber addition or page publication will trigger the event and send the applicable information to the listener.
The update to ExpressionEngine is solid, and keeps the core functionality in tact, while upgrading many of the lagging features that had needed some attention over the years. This keeps development moving rapidly ahead without a steep learning curve, and provides many new features to make the client's life happier.