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.
The Charon Cart
The CharonCart extension
is a wonderfully easy to use and efficient extension for collating information
into a shopping cart, storing that information from page to page whilst the
user is browsing and then retrieving that information to display as cart contents.
It achieves this by using an array to store which products have been placed
in the cart, their cost, quantity and any other details you wish to store. This
array (a set of rows and columns like an excel spreadsheet) is moved back and
forth from the current page into what is termed a session variable or cookie.
A session cookie is a special kind of cookie that MS ASP pages use to preserve
state from page to page. Just as a normal cookie saves information to the users
machine a session cookie saves state information (variables etc) about the current
user session to the users machine that can be retrieved from page to page. Session
cookies however only remain for the length of the current session or until they
are emptied and do not persist. This means that when a user chooses an item
from your site it is added to the cart which in turn means it is added to the
session information that you are storing so that when the user checks the cart
contents this information is still available to be read without using forms
or get strings appended to the URL. This brings us neatly to the first caveat
of using the CharonCart extension;
session
cookies must be switched on in the users browsers for the cart to function properly.
If they are not switched
on (security set at Very High in IE for example) the cart will remain empty
no matter how many times items are added. The default settings for IE and NS
allow session cookies and many ASP pages uses such cookies so it should never
really be a problem, but if you do find that your cart stays stubbornly empty
this is one of the first things you should check.
The following is a fairly
comprehensive account of how to achieve shopping cart functionality with the
Charon Cart Extension (version 2). If you are already a seasoned user of ultradev
you will find that many of the pictures and instructions are unnecessary, my
apologies. There is only one bug that I have found in version 2 where totals
are calculated in the wrong order in the code so they are incorrect. This only
affects shipping and is easily fixed as explained in the quick start guide and
the comprehensive account below. A commented version of the Inc_CharonCart.asp
file is also available in the appendix and describes exactly what the functions
in this included file achieve.
next
initial steps...
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
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
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
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
You must me logged in to write a comment.