EllisLab text mark

Modernize, Stabilize, Move Forward

Warning, tech content ahead!

ExpressionEngine 3.0 will bring tremendous foundational advancements without changing the things you know and love. The upcoming Developer Preview release (v3.0.0-dp.1 a.k.a. “DP1”) will not be feature complete nor will it be ready to run on a production site. It will have progressed to a point where it is safe to begin writing and converting add-ons. This will allow plenty of time to be ready for the public launch.

The three goals for the upcoming developer

Continue Reading

Some Things Just Make Sense

The Developer Preview for ExpressionEngine 3.0 will be out this summer. Many of the changes that add-on developers can expect to see are refinements that add up to a better experience for your users. You probably keep your plugins under source control, and you probably have a README.md file that you use to describe your add-on and how to use it.

GitHub readme example

ExpressionEngine 3.0 will use your existing README.md file, giving site builders beautiful in-app documentation that you don’t have to write twice.

Continue Reading

ExpressionEngine Focus Group Program

We want to hear from you more regularly, and give a voice and platform to those who may not engage via public channels, or are typically just too busy to do so. So we are spinning up an ExpressionEngine Focus Group Program. By opting in to this program, you will receive opportunities to participate in surveys, live chats, gain access to previews, and more!


What are you waiting for? Join today!

Continue Reading

ExpressionEngine 2.10.0 Released

ExpressionEngine 2.10.01 has been released as a security and stability release, along with Discussion Forum 3.1.19. These upgrades are recommended for all installations. Some of the security enhancements include:

Continue Reading

ExpressionEngine 2.9.3 Released

ExpressionEngine 2.9.3 has been released and is a stability release with 11 minor improvements, 44 bug fixes, 3 developer enchancements, and is recommended for all installations. This release mostly cleans up some small annoyances, but has a few relevant changes that will improve your site and how you work. For example:

  • Fixed a bug (#20621) where fieldtype modifiers were not working in conditionals unless they were braced and quoted.

This change means that you should be able to stop using

Continue Reading

MinneWebCon Ticket Giveaway

We are giving away a ticket to this year’s MinneWebCon in Minneapolis, Minnesota on April 13–14. MinneWebCon focuses on grassroots knowledge-sharing. If that doesn’t sound like the ExpressionEngine community, I don’t know what does! MinneWebCon attracts many people who work in public and non-profit sectors, but has something for everybody. It was a no brainer for us to sponsor.

To enter, tweet why you love ExpressionEngine, following the official rules:

  • Tweet a brief reason why you love

Continue Reading

ExpressionEngine 2.9.1 Released

ExpressionEngine 2.9.1 and Discussion Forum 3.1.17 are now available for download. ExpressionEngine 2.9.1 is a security and stability release recommended for all users. In addition to improving security, it includes over 40 bug fixes. Some of the more noteworthy bug fixes or improvements to functionality or security are:

  • Made {cp_edit_entry_url} available to Admin Notification of New Entry.
  • Improved Control Panel custom theme organization: view files can now be stored in a views subfolder.

Continue Reading

ExpressionEngine 2.9.0 Released

ExpressionEngine 2.9.0 has been released and includes new features and bug fixes. Discussion Forum 3.1.16 and Multiple Site Manager 2.1.7 are also available as maintenance releases. Here’s a look at what’s new.

New Conditionals Parser

Template Routes, advanced.

The main story for 2.9.0 is the new conditionals parser. With this new parser, we’ve been able to boost performance, ensure conditionals behave more consistently when written in different ways, and added more power. Here’s a quick summary:

  • Conditionals

Continue Reading

New Conditionals Parser in 2.9

In 2.9 we rewrote the conditional parser. It is more performant, more consistent, and has new operators.

{if segment_3 == 'books'}
:channel:entries channel="book_reviews" limit="5"}
:elseif segment_3 == 'games'}
:channel:entries channel="game_reviews" limit="5"}
:channel:entries channel="misc_reviews" limit="5"}

Starting with 2.9 conditionals evaluate when ready. When a conditional statement’s variables are known the statement will be evaluated as either TRUE or FALSE. In the above example, when segment_3 is “games” we will remove the other two channel entries tags from the template. Instead of processing 3 channel entries tags and then deciding which one to show, we now determine which tag to process.


The distinction between “simple” and “advanced” conditionals is gone. Write your conditionals anyway you want. Put the variable first ({if my_snippet == "awesome"}) or put it last ({if "awesome" == my_snippet}). Use as many if:elseif statements as you desire. Use boolean operators. They are now all evaluated when ready.

New Operators

We have added mathematical operators to our conditionals. In addition to the modulus operator (%) you can now add (+), subtract (-), multiply (*), divide (/), and compute exponents (^) on your numbers. We’ve also added a string concatenation operator (.):

{if segment_1."/".segment_2 == "site/index"

We didn’t stop there. We’ve also added three special comparison operators, inspired by CSS attribute selectors: begins with (^=), ends with ($=), and contains (*=). Using a snippet of “Conditionals in ExpressionEngine 2.9 Rock!” named my_snippet these all evaluate to true:

{if my_snippet ^= "Conditionals"}
{if my_snippet 
$= "Rock!"}
{if my_snippet 
*= "ExpressionEngine 2.9"

We also added a regular expression operator (~) so now you can do this:

{if segment_3 "/^P\d+/"}
'm paginated!

And for good measure we added a boolean not operator (!) so this works:

{if ! (segment_3 "/^P\d+/")}
    No pagination here

Or if you prefer:

{if ! (the_droids *= looking_for)

And if you want to ponder a philosophical point:

{if 2B || ! 2B} 

These are some of the major new features of the new conditional parser in ExpressionEngine 2.9. We can’t wait to see what you do with it.

Continue Reading

Improved License Management

For many years we have heard from agencies about the difficulties they have in keeping track of client licenses for ExpressionEngine. Good record keeping is a necessity, and can be as simple as a spreadsheet with the client’s name and license numbers for ExpressionEngine and any third-party add-ons used for their build. On our end we’ve provided a few things to assist, such as a “Notes” field in the Manage Purchases page with each license that can be used for the client’s name or other identifying information.

Even with these things in place, it’s easy after a few years of ExpressionEngine work to have accumulated so many licenses that some fall through the cracks. Many factors are at play: sheer volume, using a base install and forgetting to update the license, transferring some licenses to clients while maintaining others, etc. A far too common result of these many branching pathways and points for potential license confusion are conversations like this one:

End user: Hi EllisLab, we’d like to upgrade to the latest version, but we don’t know how to access the software on your site.

EllisLab: No problem, what is your license number in Admin > General Configuration? We can help you locate your account.

End user: It’s blank / It says <insert license number that is for a third-party add-on> / <insert valid license number that is not owned by the end user>

EllisLab: No problem, do you know who built your site for you?

End user: Yes but we haven’t been able to contact them / no, nobody still working here remembers who set it up.

At that point we try to help the client track down the developer, sometimes with success, sometimes not. Ultimately the developer simply neglected to key in the license number, forgot to purchase a license before taking the site live, or meant to transfer the license to their client but didn’t. To give a sense of scale to the problem, in just the last year clients have collectively experienced almost three years of waiting (25,394 hours) while sorting out their license ownership with all parties involved.

To try to address these challenges more directly, starting in ExpressionEngine 2.9, the Software License number has been moved to its own section of the control panel, and we’ve added a field to help clients (and EllisLab) know who to contact if they have questions about their license.

software license page

Note that this contact email address doesn’t have to be associated with your EllisLab.com account, as this is more for your client’s benefit down the road. In the example above, we’re taking advantage of plus addressing in the email address to use one account but still readily identify the client. If the information on this page is for some reason blank (due to using a base install, or removed from config), the control panel will prompt you to fill in that information to properly register your software. This registration information gets sent to EllisLab1 and when you are logged in, is displayed for you next to the license and your existing notes.

license use info

You will be able to see where the license is in use, as well as the last time the ping occurred. Using this information, you can monitor your clients’ sites by taking a quick glance at your Manage Purchases page and ensure none of your clients have a site that’s been down for months. E.g.: if you see a client site that hasn’t sent a ping in six months, it could be a sign that they need you for some services.

EllisLab has always taken a soft approach to license registration so we treaded very lightly here. You will never be locked out of your software nor will the behavior and output of your site be impacted by this in any way. But now agencies, freelancers, and clients are assured to have reliable information keyed in prior to launching their site, and readily on hand for managing their ExpressionEngine licenses down the road.

  1. We also include the server IP, domain name, ExpressionEngine version, and PHP version. Having that version information allows us to make more informed development decisions, and rather than have a separate ping, we are piggybacking this one for performance. Further, this ping only occurs in the control panel on select pages and with a two week cache, so it will never interrupt the use of your site, your content authors, or your site visitors. 

Continue Reading