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.
Viewing the Cart
Once a ShoppingCart has
been filled using forms and links you need to be able to display the cart contents
to the user at their request. The core of the ShoppingCart display page is the
Repeat Cart Region which enables you to display each item in the CCcart array.
This does not differ significantly from the repeat region behaviour of Ultradev
itself. It produces a loop within which an HTML element is repeated, say a table
row, and the contents of that element is changed for each cycle of the loop,
the total number of loops equally the number of items in the dynamic source;
in this case the shopping cart array, which includes the LineTotal. It is also
useful to add an update and a remove button so that users can alter the quantity
of an item in the cart or can remove and item completely. There also exists
the function of emptying the cart completely.
Display the Cart Contents
In order to display the
cart contents the first step is to add the CharonCart data binding to the cart
display page. This is then used in the same manner as you would use a normal
recordset. You can drag the columns shown under the CharonCart data binding
to the page and display all the column you have previously defined plus a bunch
of new ones that are calculated at run-time depending on the contents of the
cart, such as grand total, subtotal, shipping and tax. The [LineTotal] column
can only be used within a repeat region as it exists for every row or item in
the array and is calculated as the item price multiplied by the quantity in
the cart of course.
So design a table that will
hold your cart contents and drag the required cart columns to the table, like
the one shown below.
Next we have to repeat the
region that contains the cart contents so that every item in the cart and its
associated line total and quantities is displayed. To do this highlight the
row of the table that contains ONLY those items that are to be repeat as shown
below for our table.
Then go to to server behaviours
but instead of selecting the normal repeat region behaviour go to the Charon
sub menu and select the Cart Repeat Region. This will then repeat the region
you have selected displaying all the items in the cart. At this point you may
also wish to display the [GrandTotal] at the bottom.
Remember
do not include regions where non repeating features are contained such
as the SubTotal. Though not catastrophic it will produce very messy results!
next
updating the cart....
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.