Derek Jones
President/CTO, EllisLab, Inc.

ExpressionEngine 1.6.8 Maintenance and Security Release

ExpressionEngine version 1.6.8 has been released today, and while there are no new modules or major changes, three facets of this release led to it being a version upgrade instead of simply another build update:

  • It includes an important security update (many thanks to Travis and Justin from HopStudios for discovering and reporting the issue)
  • A large number of changes were needed to make ExpressionEngine compatible with PHP version 5.3.0
  • We’ve added a bridge for add-on developers to narrow the gap between developing add-ons for 1.x and 2.x

The third item is the one that most developers will be excited about.  First, your modules can now have their own language folder, which simplifies things for you and for your users when installing and updating.  Second, and most significant, you can use view files to create your modules’ control panel.

/modules/foo/language/english/lang.foo.php
/modules/foo/language/english/lang.something.php
/modules/foo/mcp.foo.php
/modules/foo/mod.foo.php
/modules/foo/views/foo.php
/modules/foo/views/bar/bat.php 

Any developer who has converted an add-on from 1.x to 2.x will tell you that the most tedious aspect is pulling the Display class and presentation out of their logic and converting it to the much easier to work with view files.  And with 1.x sticking around for awhile, many developers may wish to keep product parity between versions, or even build new products for the 1.x market.  This will make their lives much, much simpler.  Instead of building output in their controller logic, they can use identical logic and display methods in both versions of ExpressionEngine, making it easier to convert and maintain.

Even in a simplified example, the difference is clear:

$DSP->body .= $DSP->heading($LANG->line('fortunes_menu'));

$DSP->body .= $DSP->qdiv('itemWrapper'$DSP->heading($DSP->anchor(BASE.
                                                                   
AMP.'C=modules'.
                                                                   
AMP.'M=fortunes'.
                                                                   
AMP.'P=add'
                                                                   
$LANG->line('add_fortune')),
                                                                   
5));

$DSP->body .= $DSP->qdiv('itemWrapper'$DSP->heading($DSP->anchor(BASE.
                                                                   
AMP.'C=modules'.
                                                                   
AMP.'M=fortunes'.
                                                                   
AMP.'P=view'
                                                                   
$LANG->line('view_fortunes')),
                                                                   
5)); 

versus:

<h1><?=lang('fortunes_menu')?></h1>

<
div class='itemWrapper' >
<
h5><a href="<?=BASE.AMP.'C=modules'.AMP.'M=fortunes'.AMP.'P=add'?>"><?=lang('add_fortune')?></a></h5>
</
div>

<
div class='itemWrapper' >
<
h5>href="<?=BASE.AMP.'C=modules'.AMP.'M=fortunes'.AMP.'P=view'?>"><?=lang('view_fortunes')?></a></h5>
</
div

Don’t worry, this is not a backward incompatible change.  Your existing add-ons will continue to work, and no developers are forced to begin using this method for 1.x add-ons.  But going forward, I imagine that most will.

Our support staff is on hand and ready to assist you with any issues you may encounter while updating.  As always, if you do not skip any steps in our simple step by step update instructions, it should be a breeze and take just a few moments of your time.