History● Originally started by Silverstripe Ltd at least five years ago – abandoned due to lack of community buy-in ● Payment module continued to be developed by Silvertripe (and now part of GSOC)● Since then, developed by Nicolaas and Jeremy, Jeremy later starting his own module: shop● Silvercart and SwipeStripe are more recent e- commerce modules.
Today● Four über-developed modules, including demo sites, installers, tests, in-depth documentation ● Do you see this level of development in any of the other modules ?● Lots of developers (and their clients) are keen to be develop e-commerce applications ● Are they confused by the options? ● Do they use Magento or other applications rather than Silverstripe ones?
Silverstripe Shop● Author: Jeremy Shipman● Excellent documentation● Best practice release process● Quality tests through TravisCI● Code simplicity as well as strong usage of Silverstripe core code base and Best Practice● http://ss-shop.org/
SwipeStripe● Author: Frank Mullenger● Lots of tests● Innovative CMS features● Xero integration● Virtual products● Small licensing fee● 3.0 ready!● http://www.swipestripe.com/
SilverCart● Author: Roland Lehmann et al.● Probably most polished documentation and out-of- the-box solution● Does not use the original e-commerce as code base● Master-Slave product relationships ● product variations can be grouped while the variations can be independently maintained● PDF invoices● Most usage of third-party tools (e.g. DataObjectManager, the YAML CSS framework) and most intrusive (e.g. Page extends SilvercartPage)● http://www.silvercart.org/
select an e-commerce module● What features do I need?● What is the smallest code base to achieve this ● The bigger the code base, the more to develop / test / maintain● Documentation● Tests● DYI vs Pre-Baked● Can I get help? How much will it cost?
E-commerce is zpeshial 1● My experience: all parties underestimate the work involved ● Site owner: ● entering / importing products: Images, pricing, descriptions, product grouping, variations ● Policies and business processes: delivery costs, tax, cancellations, customer communication ● Designer: the amount of screens to design ● You can save a lot of time by standardising forms, etc... but many web designers are not very good at this. ● Front-end developer: interaction required ● Ajax stuff, difficult forms, products and product category pages work with few or many – definitely diverse - products
E-commerce is zpeshial 2● Back-end developer: ● this is more an application than a website ● Keep a record of transactions (e.g. address of the member at time of order – not just today) ● Many tricky relationships and coding challenges ● Discounts, delivery, tax, etc... etc... ● You have to be precise otherwise end customers get upset (websites can be more loosely coded)
Silverstripe E-commerce● Based on the original e-commerce● Developers include: Sean, Romain, Jeremy, Nicolaas and many others!● Original idea: very flexible data structure● Currently being developed mainly by Nicolaas● Uses Payment Module
Data Structure● Config ● Sales EcommerceDBConfig Order ● ● ● YAML file replaces traditional static variables ● Order has many OrderAttributes (abstract● Product Pages / Objects class) ● Product Category ● Item (ProductGroupPage) ● Modifier ● Can show all sorts of combination of products ● Order has one Billing + ● Product Page Shipping Address ● Product Variation (many for one ● Linked to Country + Region Product) ● Customer (Member extension) ● Other buyables ● Create as needed, any ● Process DataObject can be turned into a buyable ● OrderStep● Other Pages ● OrderStatusLog ● CartPage + CheckoutPage + OrderConfirmationPage ● OrderEmailRecord ● AccountPage
Product (buyable) Features● Product Categories CMS customisation ● products to show, filter, sorting● Full Site Tree Sorting ● retain product sorting outside of traditional structure● Best Available Image ● inherit image from parent (be it Product, ProductGroup or Default Image)● Optional weight, model (SKU), IsFeatured, quantifier (e.g. per month)● Full (hidden) Title for efficient Keyword Searching
Cart / Checkout Features● All cart functions “ajaxified”● Currency conversion● Editable checkout steps (one to many steps) – always ending in a confirm and pay then “print invoice” page.● Ability to add zero to many forms / fields for collecting additional info in checkout● Optional password field ● Customer has option but does not feel like they have to create an account● Remember previous addresses for Member● Shop Admin (separate security group) can create also create full Order from CMS
Post Sale Features● Ability to pay again / later● Customisable Order Steps (Jeremys idea) from “creation” through to “archiving” ● Allows connectivity with third-party applications at “precise” step in order process ● Admin reviews Orders “stuck” at each step ● e.g. 10 orders to mail out, 7 orders to confirm payment● Ability to send updates to customer (e.g. courier code)● Customer can cancel Order (if configured this way)● Nicely formatted emails with logo, shop address, etc...● Restful API
A few add-ons we have built● also recommended - if you buy ● corporate account (approve account, this, also buy ... security groups as customers)● any price product + donations ● discount coupon including round-up donation ● product tags: alternative product grouping● check product availability: place order, but hold to confirm ● product variations with colours● club order: place order for a group ● repeat orders of people ● stock control● combination product: combine ● tax – per country / per product products into a package ● quick add system● complex pricing: pricing based on country or member security group ● delivery costings for NZ + AU based on postal system● delivery based on weight, price, ● reward system country, etc... ● Favourites● electronic download product ● Quick Checkout: fastest way to add lots of products
Features in the pipe-line● 3.0 !● Xero Connectivity● PDF invoices● Many Images for each product● Improved importing● Twitter + Facebook integration● Multi-shop
Development tools● YAML configuration● /dev/ecommerce/● Templates broken up into smaller snippets for mix and match● Migration task takes you from 0.5 to 1.0● Variables for Ajax html classes and Ids
Coding challenges in e-commerce● Versioning / rules about ● Keep code flexible enough changing data to work with many requirements ● canCreate, canEdit, canDelete are carefully ● Add lots of “hooks” defined ● Allow class replacement ● Keep version number ● e.g. Order = new relating to sales $MyOrderClassName ● Referential integrity ● Many objects relationship ● can we delete a product? ● BAD: one Order HasMany ● “De-normalisation” Products ● product price changes != ● GOOD: one Order price in old orders for this product HasMany “Buyables” ● Save ClassName + ID (+ Version) ● Challenge: Buyable Form Field
Silverstripe improvements needed● ModelAdmin: better presentation and easier to customise ● Solution: gridfield?● Versioning and staging ● Clearer documentation ● Easier to implement● Forms more flexible● Many of these features are available in 3.0!