<%
' 定義常數
Const LEVEL_GUEST = 1 ' 訪客
Const LEVEL_MEMBER = 2 ' 一般會員
' 會員類別
Class Member
Private Fields
Public IsLogin
' 物件初始化
Private Sub Class_Initialize()
IsLogin = False
' 為了方便說明,我只用了幾個簡單的會員屬性
Set Fields = Server.CreateObject("Scripting.Dictionary")
With Fields
.Add "Level", LEVEL_GUEST ' 預設等級為訪客
.Add "Name", "" ' 預設姓名為空字串
.Add "PersonalNumer", "" ' 預設身份證號碼為空字串
End With
End Sub
' 會員初始化
Public Sub Init
Dim sName : sName = ""
Dim iLevel : iLevel = LEVEL_GUEST
Dim sPersonalNumer
sPersonalNumer = UCase(Trim(Session("MemberID")))
' 從 Session 值判斷是否已登入
If sPersonalNumer = "A123456789" Then
sName = "我是一般會員"
iLevel = LEVEL_MEMBER
IsLogin = True
End If
SetField "Level", iLevel
SetField "Name", sName
SetField "PersonalNumer", sPersonalNumer
End Sub
' 設定會員屬性
Public Sub SetField(sName, vValue)
If Fields.Exists(sName) Then
Fields(sName) = vValue
End If
End Sub
' 取得會員屬性
Public Function GetField(sName)
GetField = Null
If Fields.Exists(sName) Then
GetField = Fields(sName)
End If
End Function
' 物件結束
Private Sub Class_Terminate()
Set Fields = Nothing
End Sub
End Class
%>
<!-- #include file="GuestCheckoutForm.asp" -->
<!-- #include file="MemberCheckoutForm.asp" -->
<!-- #include file="VIPCheckoutForm.asp" -->
<%
Class CheckoutForm
' 實體物件
Private ConcreteObject
' 被繼承的物件
Public Prototype
' 會員
Public Member
' 會員層級的對應表
Private LevelList
' 物件初始化
Private Sub Class_Initialize()
Set ConcreteObject = Me
Set Prototype = Me
Set LevelList = _
Server.CreateObject("Scripting.Dictionary")
With LevelList
.Add LEVEL_GUEST, "Guest"
.Add LEVEL_MEMBER, "Member"
.Add LEVEL_VIP, "VIP"
End With
End Sub
' 設定會員
Public Sub SetMember(oMember)
Set Member = oMember
Set ConcreteObject = Me
On Error Resume Next
Execute "Set ConcreteObject = New " & _
LevelList(oMember.GetField("Level")) & _
"CheckoutForm"
On Error Goto 0
Set ConcreteObject.Prototype = Me
End Sub
' 顯示表單
Public Sub Display()
%><!-- #include file="../CheckOut.tpl.asp" --><%
End Sub
' 顯示購買人欄位
Public Sub DisplayShopperFields()
%><p>
<label for="shopper_name" class="text">購買人姓名</label>
<span><% = Prototype.Member.GetField("Name") %></span>
<input type="hidden" name="shopper_name" id="shopper_name"
value="<% = Prototype.Member.GetField("Name") %>" />
</p>
<p>
<label for="shopper_pid" class="text">身份證號碼</label>
<span><% = Prototype.Member.GetField("PersonalNumer") %></span>
<input type="hidden" name="shopper_pid" id="shopper_pid"
value="<% = Prototype.Member.GetField("PersonalNumer") %>" />
</p><%
End Sub
' 顯示收貨人欄位
Public Sub DisplayReceiverFields()
%><p>
<label for="receiver_name" class="text">收件人姓名</label>
<input type="text" name="receiver_name" id="receiver_name"
value="<% = Prototype.Member.GetField("Name") %>" />
</p>
<p>
<label for="receiver_address" class="text">收件人地址</label>
<input type="text" name="receiver_address" id="receiver_address" />
</p><%
End Sub
' 顯示選擇欄位
Public Sub DisplayOptionFields()
End Sub
' 物件結束
Private Sub Class_Terminate()
Set ConcreteObject = Nothing
Set Prototype = Nothing
Set LevelList = Nothing
Set Member = Nothing
End Sub
End Class
%>
<%
Class GuestCheckoutForm ' Extends CheckoutForm
' 被繼承的物件
Public Prototype
' 顯示購買人欄位
Public Sub DisplayShopperFields()
%><p>
<label for="shopper_name" class="text">購買人姓名</label>
<input type="text" name="shopper_name" id="shopper_name"
value="" />
</p>
<p>
<label for="shopper_pid" class="text">身份證號碼</label>
<input type="text" name="shopper_pid" id="shopper_pid"
value="" />
</p><%
End Sub
' 顯示收貨人欄位
Public Sub DisplayReceiverFields()
Prototype.DisplayReceiverFields
End Sub
' 顯示選擇欄位
Public Sub DisplayOptionFields()
%><input type="checkbox" name="change_level" id="change_level" />
<label for="change_level">是否成為會員?</label><%
End Sub
End Class
%>
<%
Class MemberCheckoutForm ' Extends CheckoutForm
' 被繼承的物件
Public Prototype
' 顯示購買人欄位
Public Sub DisplayShopperFields()
Prototype.DisplayShopperFields
End Sub
' 顯示收貨人欄位
Public Sub DisplayReceiverFields()
Prototype.DisplayReceiverFields
End Sub
' 顯示選擇欄位
Public Sub DisplayOptionFields()
%><input type="checkbox" name="change_level" id="change_level" />
<label for="change_level">是否升級為 VIP 會員?</label><%
End Sub
End Class
%>
/class/VIPCheckoutForm.asp
1234567891011121314151617181920
<%
Class VIPCheckoutForm ' Extends CheckoutForm
' 被繼承的物件
Public Prototype
' 顯示購買人欄位
Public Sub DisplayShopperFields()
Prototype.DisplayShopperFields
End Sub
' 顯示收貨人欄位
Public Sub DisplayReceiverFields()
Prototype.DisplayReceiverFields
End Sub
' 顯示選擇欄位
Public Sub DisplayOptionFields()
%><p>您可用的 ECoupon 點數:100</p>
<label for="ecoupon_number">輸入欲使用的 ECoupon 點數:</label>
<input type="text" name="ecoupon_number" id="ecoupon_number" size="10" /><%
End Sub
End Class
%>