分享
 
 
 

用UltraDev创建一个电子商务商店(3)

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

购物Cart页面

首先让我们看看这个页面,如图12。我们只要显示购物Cart上的东西,这样我们就不必任何的记录集了。从另外的页面上复制Cart并将它粘贴到Data Bindings(数据绑定)。先增加一个表单到页面上。为了在Cart能更新你必须有表单和按钮。在表单中将一个表格放置到网页上并拖拉适当的Cart列到表格中。选择这些列上的行,增加Cart重复区域(Repeat Region)SB(服务器行为)。这个Cart重复区域创建只是使用在Cart中,它将在这个Cart上显示所有当前的项目(值得指出的是,通常的数据库重复区域行为在这里不适用)。为了Cart中的任何项目(这些项目是你想让用户可以在页面上改变的),你必须为它们创建表单元素并将表单元素放置到Cart重复区域中去。这里你可以看到我所增加的表单元素,名为Quantity,来使得用户改变定货的数量。我需要它来显示当前Cart中的Quantity,所以我需要绑定它到适当的Cart元素(比如 ,从元素中选择Quantity,并且点击列在数据绑定窗口的Quantity区域,在点击Bind(绑定)按钮)。这样做的目是为了让用户可以改变Cart区域。实际上,这个Cart只是保持了一系列的数值。你可以调用这些数值并改变它们,但是如果用户键入一个尺寸是不存在的,那么就写到你的OrderDetails表格中去,写明你想要订购的东西。在本例子中我不想让用户改变尺寸或者颜色,因为它们可能改变它为一个数值,而数值对于哪个项目并不是有效的。所以我想迫使它们回到Details页面看看有效的尺寸和颜色。实际上,一旦你想在Cart上改变尺寸/颜色,你不得不从你的Cart中移除项并再次增加它。

||||||在重复区域顶部应该有一系列的表单按钮并且重复区域应该附在表单中。这个重复区域包括了一个编辑框元素名为Quantity,它将限制定购Cart数量元素;重复区域还包括一个复选框名为Remove,它自动设置Quantity为0。你需要增加一些其它的Cart SB's。选择Quantity按钮并增加Update Cart SB(更新Cart 服务器行为)。为其它你想让用户能更新的Cart区域数值进行同样的操作。增加Redirect Cart(重定向Cart)是空的SB,并且选择CartEmpty.asp页面。选择Empty Cart按钮并增加空的Cart SB。然后当Update Cart按钮被按下时,这个项目或者任何的项目将被手动设置为0。这些按钮提供了多种的功能。这里值得指出的是,我们可以利用相同的设置应用到了Checkout 页面上。首先创建一个Cart页面,再再次将它保存为Checkout.asp,然后增加其余的行为和代码到Checkout.asp网页上。数据绑定如图13所示,服务器行为如图14所示。

下面让我们来看看按钮的代码:

1.按钮Back to Previous Page(回到前一页),其代码为

<input type=button onClick="history.back()" value="< Back to Previous Page" name="BUTTON">

2.Empty Cart按钮

如果Cart是空的它将运行重定向。如果Cart Empty SB重定向用户到CartEmpty.asp上。缺省状态下这个代码是适用于超级文本连接但是我想适用于一个按钮。所以我利用这个代码来做一些特殊的事情,以至于是这个按钮可以工作。我增加Empty Cart Server Behavior(空的服务器行为)到页面上,然后改变连接到一个句号(.),(仔细看以下代码,这个句号位于<font color="FFFFF">标签之后)并这个句号是白色的(在白色背景下它是看不出来的),最后我增加这个按钮的onclick代码,详细代码如下:

<a href="<%=UC_EmptyCart%>"><font color="#FFFFFF">.</font></a><input type="button" name="Submit3" value="Empty Cart" onClick="window.location.replace('Cart.asp?UC_EmptyCart=1');">

||||||3.Update Cart按钮

<input type="submit" name="Submit" value="Update Cart">

4.Check Out 按钮

<input type="button" name="Submit2" value="Check Out" onClick="window.location.replace('checkout.asp');">

5.Remove 复选框代码

当你选择了该复选框并按下更新按钮的时候,这个代码实现在Cart重复区域取出项目的Quantity的数值并将它设置为0.按下该按钮就更新了Cart重复区域并丢弃了从Cart数组中的任何Quantity为0的数值。如果在Cart只有一个项目,这个Cart就变成了空(Empty),并且重新定向。

具体代码如下:

<input type="checkbox" name="checkbox" value="checkbox" onClick="document.form1.Quantity<%if (UCCart1.GetItemCount()<>1) Then Response.Write("["& UCCart1__i& "]")%>.value='0'">

Cart Empty网页

这个网页只是简单地显示文本"Your cart is empty(你地Cart示空的)"。当Cart页面被访问并且它是空的或者当Cart页面已经满了并且所有的项目被移除了,它将起到重定向的作用。在该网页上没有任何的数据绑定(Data Bingdings)或者服务器行为(Server Behaviors)。该页面上的Exit按钮运行一个onclick行为,它将使用户回到开始页面上。而Continue Shopping 按钮将重定向到Search.asp页面上去,可以参见上面的重定向按钮的代码。这些按钮被设置为None,如果你想你可以从页面上移除表单标签,因为没有任何的表单被传递。该页面如图15所示。

||||||Check Out页面设计

页面如图16所示,这个Check Out页面可以从Cart页面被访问或者在任何时间在导航页眉被访问。这个网页可以很容易地从Shopping Cart页面被创建。它浩瀚了所有地相同元素(上面已经详细介绍了)。Cart页面中的Check Out按钮被Submit Order按钮所取代,利用相似的代码这个Submit Order按钮可以重定向到Order.asp页面上。

我原来适用的存储过程是从相同的存储过程插入数据到Orders和OrderDetails表格中。这种方法插入数据到Orders表格是利用在SQL 7的@@标识特性来新增OrderID,再在Cart Array中循环,并且适用相同的OrderID把Cart数值写到OrderDetail表格中去。这是一种很好的方法。现在我开发了另外一种方法。

||||||我创建了一种Timekey 的方法。

这种Timekey是一个基本的当前日期和时间的快照数值。比如12/10/2000 10:13:08 PM写为121000101308。我将这个数值和CustomerID插入到Orders表格中去。这个数值和CustomerID就创建一个独一无二的Primary Key(主键)对以用于识别新插入的Order记录。这里值得指出的是,在有两个用户同时用相同的CustomerID注册并同时进入这个页面的时候它并不是一个独一无二的对。如果你对此感到有点紧张的话,你可以在Customer表格上设置一个标志区域(比如 True/False、0/1等等.):设置一个注册位区域为True(1)。这样当有用户已经注册了就不允许其它用户再注册,因为此时该位已经设置为True(1)了。最后当用户退出商店的时候,你要把该注册位还原为0。

CustomerID作为一个Session变量已经存在。Timekey再CheckOut页面上被创建并且作为一个Session变量。CustomerID、FirstName、LastName以及Class在Login页面上也已经创建为Session变量了。接着,要创建一系列的隐藏表单区域CustomerID、Timekey、FirstName、LastName和Class,并且将它们用相同的名字绑定给Session变量。

表单通过Insert Record SB(插入记录服务器行为)可以提交。通过设置Session变量给表单元素 ,你能更容易地使用Ultradev的Insert Record SB来自动匹配表单元素给数据库区域。一旦记录被插入,Insert Record SB就设置为重定向到Orders.asp页面。缺省地,当你给表单插入SB的时候,它将饱代码置于UltraCart 代码的前面。你需要选择所有的代码并且将它移动到<Html>开始标签的上面。Check Out页面的具体代码如下所示:

<% ' this creates a Timekey and makes it a Session variable to use along with the CustomerID for insert into orders and then use both values to retrieve the OrderID from the insert for use in inserting to OrderDetails

Dim TimeKey

TimeKey = Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now)

Session("Timekey")=Request("Timekey")

%>

<%

' *** Insert Record: construct a sql insert statement and execute it MM_editAction = CStr(Request("URL")) If (Request.QueryString <> "") Then MM_editAction = MM_editAction & "?" & Request.QueryString End If If (CStr(Request("MM_insert")) <> "") Then MM_tableName = "dbo.Participants" MM_fields = "Timekey,TimeKey,',none,'',CustomerID,CustomerID,',none,''" MM_redirectPage = "Order.asp" ' create the insert SQL statement MM_tableValues = "" MM_dbValues = "" MM_fieldsArray = Split(MM_fields, ",") For i = LBound(MM_fieldsArray) To UBound(MM_fieldsArray) Step 5 FormVal = CStr(Request.Form(MM_fieldsArray(i))) Delim = MM_fieldsArray(i+2) If (Delim = "none") Then Delim = "" AltVal = MM_fieldsArray(i+3) If (AltVal = "none") Then AltVal = "" EmptyVal = MM_fieldsArray(i+4) If (EmptyVal = "none") Then EmptyVal = "" If (FormVal = "") Then FormVal = EmptyVal Else If (AltVal <> "") Then FormVal = AltVal ElseIf (Delim = "'") Then ' escape quotes FormVal = "'" & Replace(FormVal,"'","''") & "'" Else FormVal = Delim + FormVal + Delim End If End If If (i <> LBound(MM_fieldsArray)) Then MM_tableValues = MM_tableValues & "," MM_dbValues = MM_dbValues & "," End if MM_tableValues = MM_tableValues & MM_fieldsArray(i+1) MM_dbValues = MM_dbValues & FormVal Next MM_insertStr = "insert into " & MM_tableName & " (" & MM_tableValues & ") values (" & MM_dbValues & ")" ' finish the sql and execute it Set MM_insertCmd = Server.CreateObject("ADODB.Command") MM_insertCmd.ActiveConnection = "dsn=Tripstore;" MM_insertCmd.CommandText = MM_insertStr MM_insertCmd.Execute ' redirect with URL parameters If (MM_redirectPage = "") Then MM_redirectPage = CStr(Request("URL")) End If If (InStr(1, MM_redirectPage, "?", vbTextCompare) = 0 And (Request.QueryString <> "")) Then MM_redirectPage = MM_redirectPage & "?" & Request.QueryString End If Call Response.Redirect(MM_redirectPage) End If

%>

<html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有