We regularly develop custom concrete5 packages for concrete5 to solve project specific problems. Recently we've been developing several show sites, so we've developed quite a number of eCommerce specific packages.

In the spirit of sharing code we've added some of the recent packages we've developed for concrete5 and eCommerce to our GitHub repository. For each I'll explain the reason why we needed to develop the add-on and what is specifically does.

icon.pngeCommerce Product Purchaser Lists (core_commerce_purchase_lists)

The problem

Across multiple projects our clients needed a way to quickly view, print or export a list of customers that have purchased a particular product. More specifically, we'd set up a site where the products were actually 'e-tickets' to events, so the customer lists would act as a 'door list'.

What this package does

This package creates a new dashboard page called 'Product purchasers'. In the Dashboard page an eCommerce product can be selected to display a list of customers with their Last and First name, email address, their order number and date, the quantity they've selected and any options they picked for that product.


The Dashboard page also will export the data as a CSV file or print it neatly.


Such a list could also be useful if you needed generate a list of emails of all customers of a particular product.

View package on GitHub

icon.pngeCommerce Product Selector Attribute (product_selector_attribute)

The problem

We wanted a way to associate a page with a product, being able to select a product at the time of page creation (through the composer), rather than the other way around (selecting a page in the sitemap when editing a product). 

Why did we want to do this? We have been combining our event calendar system with eCommerce to sell tickets to events. In this case, we wanted to have a product block on an event page, which is created via the composer. We wanted to be able to pick a product as a page attribute so that there was no need to manually configure the product block, as well as automatically change the way the event page displayed.

What this package does

This is a custom attribute type that allows an eCommerce product to be selected, so like other attributes types new attributes can be freely created for pages and used in the composer. When selecting a product the product search dialog is provided, making it easy to find and select a product.


The attribute simply returns the ID of the select product. This could be used hypothetically to simply see if a page had an associated product (for example to change a link from 'view details' to 'view details and purchase'), or something more creative where product specifically could be looked up. 

For our event page, we overrode the product block with a simple change that looks to see if the page it is on has a product attribute set, removing the need to manually edit the block to point at the selected product (meaning all aspects of the page are composer form configured).

By itself this package isn't particularly exciting, but like other custom attribute types available for concrete5 it can be considered a building block to solve particular scenarios.

View package on GitHub

icon.pngFree Order method for eCommerce (core_commerce_free_order) 

The problem

We had a scenario where we needed to provide a discount code that produced a 100% discount off of a particular product (i.e. someone had pre-purchased something). Out of the box, eCommerce doesn't handle free orders, as it will still present payment gateways like Paypal as an option (and such gateways don't handle zero value purchases)

What this package does

This package installs a new eCommerce Payment Method, called 'Free Order'.

When enabled this payment gateway only appears in the checkout payment options when it detects that the total of the order is zero, but it also removes all other payment options - this in effect removes the payment method screen altogether from the checkout process and simply allows the order to be placed.


This payment method is really a copy and modification of the built in 'Default Gateway', so it also has the option to pick the transaction type, either putting orders through with the status of 'pending', meaning they need manual confirmation, or 'authorized', meaning that the order is ready to ship.

View package on GitHub

These packages are free to use and we hope they prove useful beyond our projects - improvements and pull requests welcome.