Zen Cart Checkout Candy - the Algorithm

Overview

People ask me all the time about Checkout Candy, what it does and doesn't do, why they need it, etc. etc. So here are the answers.

The core of Checkout Candy is just a platform to display messages. Messages are displayed on the Shopping Cart page and on the first page of checkout (Shipping page). If you know how to write PHP code, you can do this much yourself. So what's the big deal?

The big deal is that I add sprinkles of logic to Checkout Candy to display messages that encourage customers to do certain things. And I do it to your specifications. This is custom, one-off code, just for you, based on the upselling or cross-selling you want to do in your shop. People ask for all kinds of different things; for example:
  • Buy item A if you have item B in the cart (a Better Together style upsell without the discount).
  • Add more items to your cart to qualify for Free Shipping, a coupon, a discount, etc.
  • Buy product A if it's not in the cart already
  • Buy product A in groups of 4, 6 or 10 for a greater Quantity Discount
But the most common request is to prompt the customer to complete an upsell I have set up using Better Together or Combination Discounts. NB: "complete the upsell" is not simply "display the offers I have" - that can be done using the Promotional Pages. When I say, "complete the upsell," I mean evaluate the cart contents and make suggestions based on the discount mix. This is really complicated. So I've only done it for the two most simple discounting modules, Better Together and Combination Discounts.

Checkout Candy with Better Together

If you have linked A and B using Better Together, and you have A in your cart, you will be prompted to buy B. If you have B in your cart, you will be prompted to buy A. If you have the same number of A and B, you will not be prompted.

If you have overlapping rules - for instance, (A and B) and (A and C), and you have A in your cart, you will be prompted to buy both B and C. This is because both B and C are potentially discounted items. To see the actual discount, you can deploy Discount Preview, or tell the customer to go to the Payment page in the checkout process.

Here's the link for Checkout Candy for Better Together.

Checkout Candy with Combination Discounts

Suppose you have specified that buying A and B will get you a discount on C. If you do not have A and B in your cart, it will prompt you to buy the missing one(s), in the count specified in your add_linkage() statement. If you have A and B but not C, it will tell you you qualify for a discount on C.

The same caveat about overlapping rules applies.

Here's the link for Checkout Candy for Combination Discounts.

Checkout Candy with Big Spender/Big Chooser

Because of the complexity of evaluating partially complete offers (the way Checkout Candy does) with Big Spender and Big Chooser, I decided to go with a different approach. A new module called Big Upsell has been developed, which displays all your Big Chooser and Big Spender discounts on the shopping cart and checkout shipping pages. It doesn't probe the cart and determine what discounts have and could be taken based on the cart contents, it simply displays all available discounts. By default, all discounts are "available" unless
  • A set_group statement was used, and you are not logged in and in that group.
  • A set_coupon statement was used, and you have not entered that coupon.
I used the name Big Upsell because the behavior is so different compared to Checkout Candy.

Think about the content of the Promotional Pages for Big Chooser and Big Spender. This is what Big Upsell displays, but on the shopping cart and checkout page, not on a dedicated page.