Charon Cart Version 2 Tutorial

This is a comprehensive tutorial outlining the steps neccessary to implement a shopping cart on a site using the excellent Charon Cart Extension. It is suitable for all but the very novice Ultradev user. The only requisite skills are an ability to create filtered recordsets and some familiarity with the Goto Link Page behaviour.

There are well illustrated steps to all the Charon Cart features, a short discussion on database design and a commented version of the server side code included with this extension.

This tutorial has been written with the kind permission of the extension author Jules Roberts. Corrections and suggestions are welcomed.

Using Discounts

A discount is added based on a value that you supply through a database table. You must create a recordset that retrieves only ONE record in much the same way as was done in the earlier sections concerning adding to the cart. In this case how you filter the recordset to one record depends entirely on how you are deciding what discount to bestow. You may be using a customer login attribute where each customer is assigned a different discount as part of their customer file or maybe based on total order cost where the table and query might look very similar to that of the shipping example above.

However you decide to calculate discounts you will need a database table that you can retrieve a single record from that supplies the discount amount as a number not a percentage the final GrandTotal is calculated as;

=CCcart_SubTotal + CCcart_Shipping + CCcart_SalesTax - CCcart_Discount

Click on the Charon Cart > Set Discount server behaviour to open this dialogue box.

Select the filtered recordset that contains the Discount amount to be deducted from the GrandTotal and then select the field within the recordset that actually contains the discount amount.

If you wish to use a percentage discount then DO NOT apply the Charon Cart > Set Discount server behaviour and add this ASP code to your page below the point where your filtered discount recordset is created. Switch to code view and find the point marked in the code view below as HERE. It lies after your recordset for discounts has been opened, in this case the recordset is called rsDiscount.

The ASP code that you need to insert at HERE is this in plain English; take the percentage value stored in the discount column of the filtered discount recordset (in this case rsDiscount) and divide the CCSubTotal by that value to give the actual order Discount amount. To do this you need to know three things; the object name of the required recordset (in this case rsDiscount), the field name of the column of that recordset that contains the discount percentage (in this case "Discount") and the name of the variable that is used by Charon Cart to store the discount which is CCcart_Discount. We also need to run a quick check to make sure that the filtered recordset you have created is not empty, i.e. that there are no records contained within it. The code is shown below;

<%
' check to see if rsDiscount is empty
If Not rsDiscount.eof Then
' if it is not empty then do this
CCcart_Discount = CCcart_SubTotal * (rsDiscount("Discount") / 100)
End If
%>


So if your subtotal was 125 and your discount percentage was set at 5, CCcart_Discount would be equal to 125 * (5 /100) = 6.25.

The discount amount can then be displayed as normal and the GrandTotal will be correctly displayed.

next adding tax or VAT....
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18

Comments

A VERY important tip for use with Dreamweaver MX

November 15, 2002 by Ivan Halen

I found that storing the Order and the Cart to a Database with Dreamweaver MX requires a slight modify to both the rsOrders and rsOrderDetails Recordsets (pages 13/14 of the tutorial).

In order to work properly, you have to change the LockType from Read Only (this is the default LockType in DreamweaverMX) to Optimistic. To do so, just select your Recordsets in the Server Behaviors Panel one at a time, then go to the Properties bar and change the Lock Type as I said above.

Maybe on Ultradev the default Lock Type is Optimistic (remember that's NOT so on Dreamweaver MX), so Rolf didn't mentioned in his tutorial. If you don't change the Lock Type, you'll get this error:

"ADODB.Recordset (0x800A0CB3)
Current Recordset does not support updating. This may be a limitation of
the provider, or of the selected locktype."

(as you see you find the word "locktype" in the error, and it's quite easy to understand: not so if you are using a non-english version of IIS or PWS, as me)

Oh, Rolf! Please change the Image029.gif on page 14: the selected Recordset is rsOrders and not rsOrderDetails, and that maybe confusing for the new user.

Happy Carting! :-)

About the Tutorial

November 17, 2002 by Kamran Aslam

I think the tutorial is tooo long. it will be better if it will be a little shorter or in other means " to the point" But anyways its good. but boaring too beacuse of too much text i guess.

Thanks anyways for the good things.

 

Pretty Good Until SSL

January 1, 2003 by James Threadgill

This was a pretty good tutorial until you left me hanging out to dry without a way to pass my cart over to my SSL connection. I found a form variable or a querystring works fine for this. In order to implement such a scheme one must create a modified version of the inc_CharonCart.asp, so that the function CookieToCart reads the values in from the form variable or querystring after one establishes the SSL connection. I modified it like so and saved it as ssl_inc_CharonCart.asp:

<%
CONST CC_ProductID = 0
CONST CC_Quantity = 1
CONST CC_Name = 2
CONST CC_Price = 3
CONST CC_UniqueKey = 4

CCcart=CookieToCart("SoftwareCart")
CCcart_SubTotal=0
CCcart_numItems=0
CCcart_Shipping=0
CCcart_Discount=0
CCcart_SalesTax=0
isFound=false

for i="0" to ubound(CCcart,2)
if CCcart(CC_ProductID,i) <> "" then
isFound=true
CCcart_SubTotal=CCcart_SubTotal + (CCcart(CC_Quantity,i)*CCcart(CC_Price,i))
CCcart_numItems=CCcart_numItems + 1
end if
next

function CCcart_LineTotal
CCcart_LineTotal=CCcart(CC_Quantity,i)*CCcart(CC_Price,i)
end function

function CCcart_GrandTotal
CCcart_GrandTotal=CCcart_SubTotal + CCcart_Shipping + CCcart_SalesTax - CCcart_Discount
end function

function CookieToCart(cookiename)
mystring=Request("Cart")
dim myarray(5,50)
productarray=split(mystring,"|")
for j="0" to ubound(productarray)
itemarray=split(productarray(j),"^")
for i="0" to 5
if itemarray(i) <> "" then
myarray(i,j)=itemarray(i)
else
myarray(i,j)=null
end if
next
next
CookieToCart=myarray
end function
%>

Notice the variable "mystring" in function CookieToCart now gets the cookie using a generic request.  The other difference is--unless you are allowing Cart Updates on your checkout page--is the the CartToCookie function and the code to initialize the cart array are no longer needed and can be removed for clarity as I have.  

RE: A VERY important tip for use with Dreamweaver MX

January 1, 2003 by James Threadgill
Thanks for this--saved me some head banging.
See all 20 Comments

You must me logged in to write a comment.