Commerce 0.9.0-rc1 - the beta for the beta has arrived

With great pride and joy I’ve just released Commerce 0.9.0-rc1.

This release has some new features and improvements I’ll go over below, but perhaps more importantly, this release can be seen as a beta release for the Commerce beta!

Commerce 0.9 has all the base line features we determined for a beta ecommerce platform. There’s always more to add, and we’ll continue to do so, but this is where we draw a line in the sand.

More about what we mean by “beta” in a couple of days. For now, let’s look at what’s new in 0.9.

Breaking Changes / Deprecations

In 0.9 we’ve moved all event constants to the main Commerce service, instead of being scattered around the code base. This is relevant for module developers, as it makes it easier to navigate different events from within your IDE (they’re all on \Commerce::EVENT_), and also makes maintaining a predictable naming pattern easier for us.

You can also find a full list of events in the documentation now.

New: Sortable Grids

If you think we’re done with improving the dashboard, you’re wrong. In 0.9 we’ve made it possible to sort grids dynamically by clicking on column names. With the sort icon in the top right you can change the order. This works on all grids, and can be enabled/disabled in the code on the column level.

This release also fixes some bugs in the grids, such as clicking the pagination icons sometimes not being handled by the javascript, instead sending you back to the manager homepage.

If you have UI/UX improvement ideas for the dashboard (and especially the common widgets like grids and forms), be sure to let us know.

New: SagePay payment gateway

Especially for our UK customers, and already announced at the Meetup in Bournemouth a few weeks ago, Commerce now supports SagePay as a payment gateway (docs). The SagePay gateway offers credit card checkouts with a hosted form (redirect off-site).

New: commerce.get_orders snippet

Commerce already tracked user accounts in the checkout, but until now it didn’t have a way to show previous customer orders. The commerce.get_orders snippet is now available to help you with that.

I’ve not yet written the documentation for this new snippet, but expect that to appear in the documentation under Snippets in the next few days, along with some example templates for different ways of showing the previous orders.

New & Improved: changing modes + disabled mode now affects front-end

Commerce has three modes. Test, live, and disabled. You can now change the current mode from the Configuration checklist, including the option to disable the webshop.

When setting the mode to disabled, the frontend snippets (cart, checkout, etc) will return a generic message that informs the user the functionality is temporarily unavailable. This is useful for when you’re making big changes to your product offering, or when you’re migrating to a different server waiting for DNS to catch up.

One thing worth noting is that when you switch between test and live mode, that will not only affect the available payment/shipping methods, but you’ll also switch between seeing test and live data (orders/purchases). That also affects reporting.

New Features Page

As we’re preparing to release the beta, we’ve also gone through everything Commerce can do today, and highlighted the most important features on a new features page.

Check out what commerce can do here »

Full Changelog

Here’s everything that’s new in 0.9.0:

Deprecations / Breaking Changes:

  • All EVENT_ related constants have been moved from model and other classes, onto the main Commerce service. The old constants are deprecated and planned to be removed in 1.0. Check your modules to make sure all event listeners are applied to \Commerce:EVENT_ classes.

New features:

  • [dashboard] Add ability to sort grids by clicking on column headers, and an icon in the top right to switch direction [#159]
  • [dashboard] Add convenience returnError/returnSuccess methods to Page class
  • [dashboard] Add buttons to set the mode to test/live/disabled to the config checklist [#2]
  • [gateways] Implement SagePay payment gateway (Server/redirect integration) [#37]
  • [reports] Add new “Customers that bought a Product” report that exports a list of customers/order items for a product [#166]
  • [snippets] Add new commerce.get_orders snippet to list orders places by a logged in user. [#119]


  • [dashboard] Show name of rate provider instead of class name in Tax Groups > Rules
  • [dashboard] Add order creation date to orders grid
  • [dashboard] Make active item in top navigation bold and blue
  • [dashboard] Use nicely formatted error message on error pages
  • [dashboard] Add ability for form widgets to not submit in a modal and to change csrf key
  • [internal] Add Commerce->isDisabled() method and change Commerce->isTestMode() to check specificially for test/unit_test mode
  • [taxes] EU VAT RateProvider slight refactor in getRates and useReverseCharge methods with improved tests

Bug fixes:

  • [dashboard] Fix clicking on pagination icons loading a different page instead of updating the grid via AJAX
  • [snippets] Make sure all snippets halt execution if commerce.mode is set to disabled.