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.
Adding The Server Behaviour
To Your Pages
The first step is to select
the Charon Cart server behaviour from the Data Bindings window as you would
add a request collection or session variable. This procedure must be carried
out for all pages that will require the cart functionality.
When you click the server
behaviour the pop window shown below will appear listing the cart columns that
are currently selected to be stored in the customer cart. The initial five columns
shown; ProductID, Quantity, Price, Name and UniqueKey are required columns and
cannot be removed or renamed, they are hardcoded into the Inc_CharonCart.asp
file and without them the site will fail to function. You can add columns that
you wish to be used in the Cart recordset by clicking the DEFINE button and
then the PLUS button to add or the MINUS button to remove columns. Be aware
that the values for these added columns should be made available from the form
or link used later to add items to the shopping cart by you or your product
database, they will not be 'created' automatically and must be provided by your
pages or database.
After you have selected
the columns you wish to utilise the CharonCart array is added to the Data Binding
List as a pseudorecordset that can be used in much the same way as a normal
recordset. It also inserts the Inc_CharonCart.asp file into your page using
a SSI (server side include) in the same way as a connection string is included.
If you view the code of a page to which you have added the CharonCart behaviour
you will see something like the image below. The alert amongst you will have
noticed that in order to include the file Inc_CharonCart.asp the file must exist
and must be placed in the root of your site folder, our second caveat.
When
the site is uploaded to the web server you must upload the Inc_CharonCart.asp
file to the web server manually as it is not classed as a related file
and will not be uploaded by ultradev.
For a complete description
of the Inc_CharonCart.asp file please see the appendix. For those less technically
minded this file is a set of functions that sets various variables and constants
and calculates values such as Subtotal and GrandTotal that are available from
the CharonCart data binding. It also contains the functions that calculate line
totals when a repeating cart contents is used (see later). Most importantly
the functions to convert the ShoppingCart back and forth between a session cookie
and an array suitable for use as a recordset on your pages. Enabling you to
place the ShoppingCart contents as easily as you would the contents of any other
array.
If you do not apply the
CharonCart server behaviour none of the cart contents will be available to you,
and if you try to access them manually you WILL generate errors as various variables
will be missing.
ALWAYS
INCLUDE THE CHARONCART SERVER BEHAVIOUR ON ALL PAGES THAT REQUIRE CART
FUNCTIONALITY.
next
adding products to 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.