ExpressionEngine 7.4 comes with major member updates, Redactor X as a new addition to the Rich Text Editor (RTE) field type, substantial updates to categories, additional CLI commands, updates to channel forms, and a whole lot more!
]]>ExpressionEngine 7.4.0 brings a new WYSIWYG editor to the native RTE. Redactor X is a modern, feature-rich editor, with a highly customizable interface. And if you want to extend the native features? That’s easy to do as well.
The native RTE field’s editor options expand in the 7.4.0 release to include the super smooth, feature-rich Redactor X text editor. The full editor toolset comes with all of the features you’d expect, including source code editing, ID and class selectors, image resizing and placement, and ‘undo/redo’ buttons. Undo is my personal go to.
There are multiple context sensitive menus that stay out of your way until you need them. Show the menus you want, where you want. If your dad wants a single static row with a bold button, an image button and nothing else? Let the man upload the pics of his new golf club driver in peace. Your boss can’t remember how to slap a © on the page? Put it in a context bar and look like a genius.
Fully integrated with with Pages, Structure, and Files, this WYSIWYG editor makes what should be simple tasks actually simple.
Did I mention there are a lot of options with this editor? It’s kind of ridiculous how many choices you have with the default buttons/menus. Find the combination that works best for you and your team; or your dad, as the case may be. Spellcheck options (including Grammarly!) and a Right-to-Left language option are there out-of-the box as well.
No matter how many options come standard, sometimes you need more. The emphasis on making your work easier continues in the Redactor X RTE’s advanced settings. Adding, editing, and customizing the native options can be done in the control panel via a simple configuration array. Custom CSS and/or custom Javascript can be added into standard ExpressionEngine templates, and then linked by select options. It doesn’t require a frontend developer to add new formatting options, custom styles, or even additional plugins.
Imperavi, the company behind both Redactor and Redactor X has ceased development of Redactor, and their support for it ended in 2023. Redactor X is their new, premier WYSIWYG editor, built from the ground up. Your existing Redactor fields will continue working just fine, but they will also convert seamlessly to Redactor X as long as they use the shipped configuration. If your site uses custom javascript, it can be manually converted to the Redactor X format.
Even if you’re not one to use a WYSIWYG, we think it’s worth giving Redactor X a shot. The feedback from the developer previews has been phenomenal!
]]>Member management gets a big boost in the ExpressionEngine 7.4 release. A new channel fieldtype ‘Member’ allows you to create relationships from entries to members, member custom fields now include most of the native fieldtypes, and there are also new and improved tags. We’ve also rolled out a new interface for member management in the Control Panel, and a few other surprises.
The new Member channel fieldtype allows you to create relationships between entries and members. It works like the existing relationship field, but instead of relating entries to other entries, you can relate entries to members. The settings allow limiting the member options by role, multiple selections, minimum and maximum number of selections, and display. Related members and all of their custom fields can be displayed as part of the entry.
Speaking of custom member fields, we’re happy to share that in 7.4 you can now use more custom field types to store member data than ever before! In addition to the 5 fieldtypes available in 7.3, 7.4.0 adds 12 additional options, including checkboxes and the file field. Now there are even more ways to include pictures of your dog being cute!
As with the existing member fieldtypes, the new fields are available on the member profile page of the control panel, and the frontend tags: Registration tag, and Profile edit tag. And yes, you can display them in entries via the new Member channel fieldtype!
Member Registration and Profile Edit forms now operate similar to the Channel Entry form. There are more parameters to handle control over the assets needed for all of the additional fieldtypes, and more control over the display of the fields. Individual form fields can be output individually using the {field:field_name}
format or through {custom_fields}{/custom_fields}
variable pair loop:
{custom_fields}
<p>
<label>{lang:profile_field}</label><br>
<small>{lang:profile_field_description}</small><br>
{form:custom_profile_field}
</p>
{/custom_fields}
Member tags also got some love, with a new {exp:member:role_groups}
template tag that displays the specified member’s assigned role groups:
<h1>Role Groups</h1>
{exp:member:role_groups}
Role group id: {role_group_id} - Role group name: {role_group_name}
{/exp:member:role_groups}
The existing {exp:member:has_role role_id="1|6}
can now check against multiple roles using the pipe delimiter.
A couple of small crowd-pleasers are in this release. The Member Manager page now matches the Entry Manager, with customizable columns, the inclusion of custom fields, customizable search, quick links to edit, login as a member, and role management.
Per user requests, you can log in with either a username OR email address. Keep those feature requests coming in, we love adding them!
Last but not least, there are new member avatar global variables that simplify the display of avatars on the front end.
<img src="images/avatars/{logged_in_avatar_filename}">
That’s it, you’re showing the logged-in user’s avatar.
Was this another excellent user feature request? Yes. Was it possible to do it before using the Custom Profile tag? Yes. Is this easier cleaner and more elegant? Also yes.
]]>This is one I find myself using all the time when debugging or setting up new templates. You’re working in the entry publisher and need to know the field short name on the fly? Now there’s a setting to display those field short names on the publish page.
Another feature you won’t know how you lived without, is the ability to add or edit file metadata straight from the entry publisher when you add your image. It’s another big time saver when you’re in data entry mode!
Just click the metadata button:
And the metadata is yours to command:
OK, everyone who uses the CKEditor option for their Rich Text Editor (RTE) fields already knew they needed this one. In 7.4.0, there’s a button to view and edit the source code. Kudos to the CKEditor team for making that possible!
ExpressionEngine’s approach to creating forms via tags keeps things simple and secure and it has always been easy to add classes and IDs. But great designers may need more than that to fully realize their designs. This implementation keeps things safe, while allowing HTML attributes to be passed through as form parameters. You can limit the attributes you want to allow via the form_attributes.php configuration file.
{exp:email:form data-automobile_type="ford"}
Results in:
<form data-automobile_type="ford" etc...>
This community driven addition shows the designers touch from start to finish and the final form owes special thanks to @jcogs-design, @albuvee and @litzinger.
The frontend channel entry form has always been flexible with regard to how fields are displayed, but sometimes you want to just use a {field:name}
tag or a channel entry loop and have everything look pretty right off the bat. 7.4.0 polishes up the default display of the fields. Now a toggle looks like a toggle out of the box!
The category system has always been versatile, allowing nesting, multiple category groups, and easy navigation using the assigned categories. But sometimes an entry should have 1 and only 1 category selected. That’s easy to do in 7.4.0, with a per category group setting for each channel. You can now limit categories to a single selection and/or require a category to be selected via the channel settings and you’re golden.
]]>TLDR: ExpressionEngine 7.3 brings with it field groups in fluid fields, color-coded statuses in relationship fields, new CLI (Command Line Interface) commands for deployments, a publish prolet to enable creating entries on the front-end of your site, allowing upload directories to be used across MSM sites, configurable parameters for automatic URL titles on entries, as well as cloning of fields, statuses, categories, and channel layouts.
Field groups in Fluid Fields further elevates the content administration experience in ExpressionEngine, allowing you to more easily tie a predefined grouping of fields inside ExpressionEngine with components in your design system.
In version 7.3 the CLI (Command Line Interface) is also taking a large step forward with the addition of 8 new commands. The new commands are specifically designed to help with the process of deploying ExpressionEngine sites, as well as opening the door for additional automation in the management of ExpressionEngine sites.
Last year we rolled out the well-received Entry Cloning. In the 7.3 release, we’ve extended cloning across the control panel to now cover channel fields, channel layouts, member roles, and categories!
We’ve also expanded the template parser to support the ability to chain together multiple variable modifiers to be used on a single template variable. Add-ons can now also register their own variable modifiers. (Please note, a coilpack update is coming shortly that add’s support for this across Blade and Twig as well)
The relationship field now includes a status indicator that visually reflects the related entry’s status.
In addition to the above, there is much more to the ExpressionEngine 7.3 release. Check out the Change Log!
]]>This release represents much more than the shipment of just “another product” for the ExpressionEngine world. While far from finished, Coilpack brings to fruition a set of multi-year strategic arcs for ExpressionEngine that we started when we first acquired this beloved content management system (CMS).
A few years ago, we took a look at where CMSs were, where we believed they were heading, and ultimately where they needed to be. This assessment led us to the ideas behind Coilpack. More specifically, a composable architecture for ExpressionEngine was brought to light by harnessing the powerful Laravel ecosystem.
This started a long journey for us, originally with questions of “Is this possible?” to “Can we do this without breaking changes to maintain stability?” and ultimately to “Can we open access to everything Laravel has to offer without jeopardizing ExpressionEngine?” Today we are happy to put forth Coilpack as an affirmative answer to all of these questions.
Coilpack opens up new possibilities in ways to both build and modernize sites with ExpressionEngine. Even if you have no immediate need for the solutions offered by Coilpack, we believe that these changes will benefit the entire ExpressionEngine community.
Coilpack is a composer package that revolutionizes the way developers work with ExpressionEngine. It introduces a flexible and decoupled architecture that seamlessly integrates with Laravel’s ecosystem, allowing developers to unlock an array of powerful tools like GraphQL, Twig, Blade, and more.
With Coilpack, customizing your solutions has never been easier. Whether you need to add support for Blade or Twig templates or integrate your content with Laravel using extension hooks, Coilpack has you covered. You can even access the ExpressionEngine container and retrieve ExpressionEngine authenticated members natively, opening up a world of endless possibilities. Overall, Coilpack empowers developers to create custom solutions with ease and efficiency.
The following are a few resources to jump in, or learn more about Coilpack!
Coilpack is a composer package that brings a decoupled architecture to ExpressionEngine. It’s installed alongside ExpressionEngine and Laravel, ultimately allowing you to harness Twig, Blade, GraphQL, REST, and even more through the Laravel ecosystem.
Overall, Coilpack represents a huge step forward for ExpressionEngine development, and we are excited to see how the community will put it to use. We encourage anyone who is interested in trying out Coilpack to download the beta release and give it a test drive. If you have any feedback or suggestions for improvement, please don’t hesitate to contact us, we’d love to hear from you.
That really depends on what you want it to do.
If you’re simply looking for Twig or Blade support, you can install Coilpack and continue to use ExpressionEngine as you always have, but now you can set your template type to Twig or Blade accordingly.
If you’re looking to take it a step further, you can use Coilpack to support GraphQL and even integrate your content within Laravel through extension hooks translated into Laravel Events. You also have access to the ExpressionEngine container, the ability to retrieve ExpressionEngine authenticated members natively, and MUCH more.
To get started using Coilpack we recommend taking a peek at our Getting Started Guide, or to jump right in:
composer create-project --prefer-dist laravel/laravel project-name && cd project-name
composer require expressionengine/coilpack:0.x-dev
php artisan coilpack
If you have a feature request or run into a bug while using Coilpack, we’d encourage you to open an issue on the repo.
If you’re looking to chat with others while you get up and running, or are looking for a pointer join us in slack and jump over to the #coilpack channel.
We’re currently on track for a first-quarter 2023 release of version 1.0.
Before closing out this post, we want to give a great big THANK YOU to all of our alpha testers. Your feedback has had a significant impact on what Coilpack is and what it will become.
]]>First, we’ve refactored how we talk about add-ons. No more talking about building a fieldtype vs. an extension or a module vs. a plugin. Now, ExpressionEngine users simply build an add-on and will add functionality to their add-on as it is needed. This has really been happening ever since ExpressionEngine 3, but the shift in how developers and the Core view add-ons was never really expressed in the docs.
Second, we’ve updated the CLI and the core to make building add-ons incredibly easy for users of any skill level.
We’re hoping that with this release, users will no longer see a barrier, and more users will be willing to try their hands at custom add-on development.
After the new add-on manager in ExpressionEngine 3 there was no longer a division in add-on types (plugins, extensions, fieldtypes, modules, etc), everything was listed one page. Likewise, installing add-ons became easier with the addon.setup.php
file. However, despite all the changes, the docs have always reflected a mix of the old and the new. Today, we’re changing that.
From now on, a developer is no longer building different types of add-ons but rather simply building an add-on. An add-on can have many types of functionality included with it, though. A single add-on can have multiple fieldtypes, hook into several core hooks, introduce custom template tags, and much more. This is how the docs now refer to add-on development. With a mix of references and guides, the docs will now walk users through the complete structure of an add-on and how to add any functionality they need to their add-on.
Get started today with the new Add-On Development Overview section in the docs.
The new CLI was introduced with ExpressionEngine 6.1 with basic commands for making different types of add-ons and other functions to help developers work more efficiently. With 7.2.5, we’ve refactored some of the commands around add-on creation as well as updated the core to make creating add-ons easier than ever before.
Get started with simply make:addon
, which will generate the start of an add-on for you with everything you need. Add a Control Panel page to your add-on with make:cp-route
. This command will generate a route for your add-on (think settings, configurations, and more), a corresponding view, and even update the addon.setup.php
to indicate this add-on now has a settings page. Need to add an action? Just use make:action
, and the CLI will generate your action along with a migration so your action will automatically be installed when your add-on is distributed. All methods and files are automatically created, set up, and ready to go for all CLI make
commands.
These are just a few examples of all the great things the CLI will do for you. Check out the docs to start building your add-on.
Of course, to make all this possible, we also updated the Core.
In ExpressionEngine 7.2 we released a new way to build add-ons that focused more on a library of services and a new style that was more object-oriented. We felt this was a great direction for ExpressionEngine. To be honest, we got it part right. It was a great direction, but we missed the mark with the implementation. We removed the docs around this and then took some time to reflect on how we can do this, but do it even better.
We’ve spent the last several weeks revamping services around add-on development. Yes, the old ways will still work for now, but we’re honestly not going to talk about that way anymore. The days of having twenty template tags in mod.my_addon.php
are done. Now, all your tags are individual classes in your Tags
folder. Not only that, the CLI will generate everything for you. All you need to do is add the business logic. Likewise, sidebars for Control Panel pages can quickly be generated without even having to create a sidebar array, just use make:sidebar
. These are only a couple of examples. Reading through the new add-on development docs, you will easily see the new way to build add-ons. This is ExpressionEngine add-on development in the best form it’s ever been.
Many will ask why or what’s the big deal. If you’ve built add-ons in ExpressionEngine, then you probably already see why this is a big deal. Add-ons bring a lot of power to ExpressionEngine sites, and we hope that with this new paradigm, the barrier to add-on development will begin to fall. Anyone should be able to create a template tag or a fieldtype, and it shouldn’t take them long to do so. Who thought we could have a working custom fieldtype in under 1 minute? This is how ExpressionEngine add-on development should be.
]]>Today we’re excited to share with you the release of not just one version of ExpressionEngine but two. Let me introduce them to you.
Version 6.4 is bringing with it the large performance scope that was originally shipped as part of ExpressionEngine 7.0.0. If you want to hear more on HOW we did it, I’d encourage you to watch this short, few-minute segment of the ExpressionEngine 7 launch event. In addition to this, we’re also bringing the global caching options launched with version 7 into version 6.4. We believe these are important steps to help lower the carbon footprint of all ExpressionEngine sites and we hope you enjoy the added speed!
Check out the changelog for all the goodies!
Version 7.2 is bringing with it new customization options for RTE (Rich Text Editors). Further insight into where fields are being used, the ability to edit related content while on the publish page, additional RTL (Right to Left) support in RTE, and much more
Likewise, check out the changelog for all of the goodies.
In addition to this, we’re happy to share that both releases are getting an updated checkbox field (specifically moving selected items to the top), as well as a large development scope by the community.
Starting in version 6.4 and 7.2 add-on developers can now build add-ons by taking advantage of new methodologies to organize their code. This will allow developers to split their extensions, MCPs, and modules into multiple files for better organization of code. Each extension hook, tag, action, and control panel route can optionally be organized into its own files.
A special shout out to Eric Lamb for this contribution!
]]>Wow, the last couple of months flew by. Here are the latest happenings from the world of ExpressionEngine.
There’s so much to unpack with ExpressionEngine 7 release that we’ll just point you to the related blog posts:
The following were moved from the ExpressionEngine Core to separate add-ons available in the store:
Recent EEConf Events