Commerce 1.1 available as pre-release

We started working Commerce v1.1 shortly after the release of Commerce v1.0 in May. This release is once again massive, with many new features and improvements for you to enjoy.

Today's release is available in the pre-releases channel and recommended only for use on development and staging environments. The stable release will follow in a couple of weeks.

This release includes some minor breaking changes and requires PHP 7.1. If you have custom-built modules that were built for v0.12 or older, you should make sure you're not relying on functionality that was already deprecated. First upgrade to v1.0.3, and check your MODX error log for any deprecation notices. We've already released updates for our official extensions where needed. If you upgrade directly to 1.1, and a module causes an error in initialisation, you will see a warning icon in the modules list.

One notable change in particular is that the \Commerce::EVENT_ORDER_PAYMENT_RECEIVED event will no longer be executed in 1.1. This event was commonly used, but not implemented consistently (e.g. for Adyen it could not fire on webhook-based confirmation). While the significance of a received payment cannot be understated, this event did not necessarily mean an order was ready for processing - which is what most implementations assume. Any module implementing this event will need to be updated to use \Commerce::EVENT_STATE_CART_TO_PROCESSING or similar event. Let us know if you need some help.

Please check the v1.1 upgrade notes when upgrading - it includes manual/notable changes and a full list of all removed/deprecated functions. See the full changelog here.

What's new?

So, disclaimers out of the way, what are the exciting new features awaiting you in v1.1?

Let's discuss some highlights.

Updated Payment Gateways

We rebuilt the way payment gateways are integrated, making it more flexible and no longer exclusively reliant on Omnipay. We've also fixed an issue where webhook-confirmed payments were using the wrong context.

With this new system in place we've updated the Mollie, Braintree, and Stripe payment gateways to their latest integrations, and updated their default styling. The other gateways still function they way they did before.

Shipping & Shipments

Shipping methods learned some new tricks in v1.1, with the ability to generate a form to embed on the shipping step and an update to the comOrderShipment->setShippingMethod() method to take in additional data.

Shipments can generate a tracking URL and provide shipment type-specific information. We'll update the documentation for custom shipping methods soon, and will also showcase exactly what these new features can do in an amazing new extension for the Dutch/Belgian market, which is almost ready for release.

For shops selling internationally, you'll be pleased to know you can now restrict shipping/payment methods by excluding countries, too. Prefix with a dash or use the new EU short-hand to finetune when they are available more easily.

To make sure your shipping methods are set up correctly, the configuration checklist will now warn you if delivery types are missing shipping methods.

Custom Order Fields

Custom order fields were introduced in v0.12, and now you can use the Basic Custom Fields module to accept user-submitted values without having to write a module.

Products & Pricing

Products can now have infinite stock, making it easier to combine digital and physical products in the same store.

Product prices now also support user and usergroup price types. Great for discounting products only for VIPs, resellers, or B2B pricing. If you have a custom price type implementation, there has been a small change in the getFields() signature that you will need to add, and you can also use a select and text field type now.

This is a caption.

Dashboard improvements

We've made some tweaks to the dashboard to allow execution of inline JavaScript, to allow more dynamic fields or views.

When clicking a link or button that opens in a modal, the modal will now immediately show up with a loading spinner to make the interface more responsive, especially for views that take a little longer to load. URLs in the browser are now updated when clicking a link, rather than when the response comes back.

Templates and snippets

The default invoice/web.twig template has been updated to only add the img tag when a logo is configured and fix a wrong date being set for the order date.

A new locale-aware strftime filter has been added to Twig templates.

The get_products snippet now supports wrapping by getPage/pdoPage, a &wrapperTpl, and &where for extra filtering. The get_orders snippet also supports &where now.

In the template used by the get_matrix snippet, you can now use any {{ resource.FIELD }} placeholder.

Developer features

If you're using $commerce->twig in a module, that's currently hard-coupling your code to Twig. To reduce the coupling we've added a new $commerce->view() that provides a cleaner, less-coupled interface.

The DescriptionField now supports a raw option for when you need to render HTML in a form.

And more..

These were the highlights of Commerce v1.1, but we've fixed more bugs and made more improvements. For more, see the full changelog and the v1.1 upgrade notes.