Commerce 0.11 pre-release now available

We're pleased to share Commerce 0.11 with you today. This new version of our new ecommerce platform has over 25 new and exciting features (which doesn't even include the additional improvements to existing functionality and bug fixes), so we'd like to invite everyone to get testing!

Check out the FAQ to learn how to get access to the pre-release. And if you're upgrading from 0.10 or an older version, see the upgrade notes here for any manual (template) changes that you may need to make.

Over the coming weeks, while this version gets tested, we'll highlight some of the most exciting aspects of this new release. There are improvements across the package, from the checkout to the dashboard, and a bunch of new extensions that can now be used.

For now, here's a (rather long!) list of new features, improvements and fixes that are available in Commerce 0.11. We've highlighted our favorite features in bold.

New features

  • [cart] Commerce now automatically selects the first available shipping method, as soon as the cart is shown [#195]
  • [cart] New ItemData module allows arbitrary data submitted to the cart to be stored (and shown) with the order item
  • [cart] New \Commerce::EVENT_ITEM_ADDED_TO_CART to allow modules to intercept cart additions (with submitted options)
  • [cart] Shipping costs are now taxed according to a tax group set on the delivery type [#13]
  • [checkout] Delivery types now determine if the shipping step should be shown in the checkout [#244]
  • [checkout] Address validation now provides structured errors with field name and message for use in AJAX
  • [coupons] Used coupon code is now available in order messages as {{ coupon.code }} [S13477]
  • [coupons] Coupons can now be limited to specific products [#236]
  • [dashboard] New \Commerce::EVENT_DASHBOARD_ORDER_ITEM_DETAIL events for displaying additional information in the dashboard
  • [dashboard] Email order messages now have a checkbox to immediately send the email (on by default)
  • [dashboard] Add order shipments to the order overview with ability to add tracking code and change shipping method
  • [dashboard] Now supports JavaScript modules that can hook into the dashboard rendering
  • [dashboard] Dashboard now supports dynamically-generated tabs in forms, the products form has been updated to use this new feature.
  • [emails] New email_header_url and email_footer_text settings let you configure a 500x120px image and footer text for order emails [#260]
  • [gateways] Now storing additional information per transaction (e.g. credit card/bank ref) for:, Braintree, Mollie, MultiSafePay, Paymill
  • [generator] Modules can now register JavaScript, CSS and HTML fragments to the dashboard in the \Commerce::EVENT_DASHBOARD_INIT_GENERATOR event
  • [modules] New Commerce::EVENT_DASHBOARD_ORDERSHIPMENT_ACTIONS event to add actions to a shipment from a module
  • [products] Add a primary image to a product to show it in the cart/checkout, supports the core media browser and inserting by URL
  • [products] Ability to duplicate a product from the products grid action dropdown [#205]
  • [products] New barcode field added to standard products
  • [products] comProduct derivatives can now define a getOrderDetailRow method to add information to the dashboard order view
  • [productstv] Products TV now has a product type input property allowing you to set the default product type for new products
  • [shipments] Custom order shipments, defined by delivery type, are now supported. For example, UserGroupShipment available separately.
  • [snippets] The get_cart and get_products snippets now have a new &separator property to define the separator between each result
  • [messages] Modules can now listen to the \Commerce::EVENT_ORDER_MESSAGE_PLACEHOLDERS event to add additional placeholders to order messages (emails)
  • [modules] The Payment event class now provides the OmniPay response object via getResponse()


  • [checkout] Automatically select the first payment or shipping method when none were previously selected [#254]
  • [dashboard] Simplify the way addresses are displayed on an order
  • [dashboard] You can now set the default tax group from Configuration > Tax Groups [#226]
  • [dashboard] Refactor grid actions from being defined as arrays (backwards compatible) to instances of modmore\Commerce\Admin\Util\Action
  • [dashboard] Setting default currency/tax group now returns nicely formatted response
  • [dashboard] Added delivery type filter to Products grid if you have more than one delivery type
  • [dashboard] Customer info on order view now has additional classes/IDs for modules like the Dymo Address Label to use
  • [emails] Tweak default order-received.twig template to include discount and shipments
  • [payments] Braintree gateway now shows a loading text until the gateway widget has been instantiated [#232]
  • [shipping] Refactored comShippingMethod/+ByWeight to check if they are available by order shipment (see 0.8.0)
  • [shipping] Refactored comShippingMethod/+ByWeight/+ByCountry to determine price per shipment (see 0.8.0)

Bug fixes

  • [cart] Make sure that item-specific links are used in the cart, instead of product-specific
  • [checklist] Fix missing URL in HTTPS check when receiving a status code error
  • [dashboard] Fix link in bundle product detail row, on order page, not opening in modal window
  • [dashboard] Fix links with target="_blank" being hijacked by the ajax navigation [#249]
  • [dashboard] Fix incorrect tax total shown on the order view when using inclusive tax mode
  • [dashboard] Fix transaction property with a boolean false value being shown as "yes"
  • [dashboard] Some slight javascript and template cleanups
  • [dashboard] Fix [esc] not closing open modals due to scope issue
  • [dashboard] Make sure changes in fields (including new image and multiselect) resizes the modal to fix overflowing [#261]
  • [gateways] Remove stray console.log in braintree form
  • [gateways] Tighten generation of the notifyUrl for background payment confirmations (e.g. Mollie) in subfolders [#258]
  • [gateways] Allow continuing a pending transaction that requires a POST redirect (e.g. Adyen) [#257]
  • [products] Make sure comProduct->getDeliveryType is called when adding a product to the cart
  • [taxes] Fix empty field on tax rule conditions (e.g. "always") causing the condition to not get executed
  • [taxes] Fix lowercased country in the EU VAT rate provider not working

Possibly breaking changes

Make sure to check the 0.11 upgrade notes for any manual changes you may want to make when updating from 0.10 to 0.11.

  • We've adjusted and added new requirement classes to the Checkout process and steps to better control the flow. If you have a custom process class or custom steps, make sure the checkout still works as expected, and especially compare the loadRequirement methods of custom step classes with the standard ones. These changes have limited impact on templates.
  • Some slight changes were made to the frontend/checkout/cart/items.twig template to show the primary image.
  • BaseGateway->markTransactionSuccessful signature changed to expect the ResponseInterface instead of AbstractResponse


  • modmore\Commerce\Frontend\Checkout\Process->completeOrder() has been replaced with comOrder->triggerPaidStatusChange()