Denmark's largest chain of sports shops, SPORT-MASTER has launched Denmark's most large-scale and ambitious Drupal Commerce shop. The webshop combinds the physical stores with the new e-commerce universe, so customers get a good experience whether they visit SPORT-MASTER offline or online.

SPORT-MASTER has an ambition to become Europe's best shop in sales of sports equipment, which requires a global, innovative and flexible platform that is easy to integrate with various back office systems. That is why we choose the extensive webshop platform Drupal Commerce.

Modules Used

Non standard commerce modules include:

Commerce add to cart confirmation
We use this to visually indicate that the mini-cart at the top of the page has been updated.

Commerce Free Shipping
When an order total exceeds xxx danish kr, or the customer is a member of the Sport-Master club, we provide free shipping.

Commerce migrate
All products in the store are added through migrate

Commerce price by components
Due to complex price calculations including discounts of various nature, we needed a tighter control over how price components are exposed to the customer.

Customer profile type
We used this module to be able to differentiate between shipping and billing address.

We needed a unique incrementing id without gaps in the order to abide by danish law
(Tried 3 different modules, this was the only one that had a seperate invoice id and didn’t just reuse the order id)

Flat rate
The site only has flat rate shipping services

Commerce coupon
The store regularly has coupons giving either a percentage or fixed price discount.

Commerce extra
We use the two submodules “adress populate” and “quantity”.
The first to pre-populate address information on the checkout page, the second to wrap quantity fields with - and + links to decrease or increase quantity.

Commerce Dibs
DIBS is the biggest payment gateway provider in Scandinavia and we use this module as the payment solution.

Custom Pricing, Taxes, Checkout, or Shipping Rules

We used several custom rules, mainly to handle our price calculation. IE. we have rules for redeeming coupons and then a rule for zeroing out negative balances if a coupon worth more than the cart total is applied.

We have a number of rules that are triggered on the different states of an order, for sending confirmation and Track and Trace mails, sending the order to Sportmaster for actual packaging and shipment of the physical product and rules for capturing the order at Dibs when the product has been shipped.

Number of Products

Number of products: ~10.500 products, ~85.000 size variants

We used Migrate for continuous import of products from the clients product database. In retrospect, this was an arduous path to choose, since the data was sent as xml, and manipulation of the xml in Migrate proved very challenging.

As we developed we found that import times for ie. prices were so big that we couldn’t import one file before the next one arriving 3 hours later. This was due to an expensive entity save per product variant. To solve this, we imported the prices to a seperate table, and then added them to the entity in hook_entity_load.

Showcase Developers: