Silverstripe & E-commerce
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?
Modules out there
●   Silvertripe Shop:
      ●   Jeremy, NZ
●   SwipeStripe:
      ●   Frank, NZ
●   Silvercart:
      ●   Roland, Germany
●   Silverstripe E-commerce
      ●   Nicolaas, New Zealand
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
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 Module
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 (Jeremy's 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
YAML example
/dev/ecommerce
Settings review
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!
THANK YOU – QUESTIONS?

Silverstripe Ecommerce

  • 1.
  • 2.
    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.
  • 3.
    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?
  • 4.
    Modules out there ● Silvertripe Shop: ● Jeremy, NZ ● SwipeStripe: ● Frank, NZ ● Silvercart: ● Roland, Germany ● Silverstripe E-commerce ● Nicolaas, New Zealand
  • 5.
    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/
  • 6.
    SwipeStripe ● Author: Frank Mullenger ● Lots of tests ● Innovative CMS features ● Xero integration ● Virtual products ● Small licensing fee ● 3.0 ready! ● http://www.swipestripe.com/
  • 7.
    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/
  • 8.
    select an e-commercemodule ● 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?
  • 9.
  • 10.
    E-commerce is zpeshial1 ● 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
  • 11.
    E-commerce is zpeshial2 ● 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)
  • 12.
  • 13.
    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
  • 14.
    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
  • 15.
    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
  • 16.
    Cart / CheckoutFeatures ● 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
  • 17.
    Post Sale Features ● Ability to pay again / later ● Customisable Order Steps (Jeremy's 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
  • 18.
    A few add-onswe 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
  • 19.
    Features in thepipe-line ● 3.0 ! ● Xero Connectivity ● PDF invoices ● Many Images for each product ● Improved importing ● Twitter + Facebook integration ● Multi-shop
  • 20.
    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
  • 21.
  • 22.
  • 23.
  • 24.
    Coding challenges ine-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
  • 25.
    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!
  • 26.
    THANK YOU –QUESTIONS?