網路購物網站 (ASP)
網路購物網站 (ASP)¶
1 問題¶
案主急需一個具有會員管理功能、購物車的購物網站,由於時限非常緊迫,而且又須要能夠有擴充商品類別的功能。不但要圖文並茂,而且要方便管理,作業流程要簡單易懂,因為案主急著將商品上線。
案主所提的需求描述相當少,但有掌握到關鍵,例如:會員管理功能、購物車、商品類別管理、類似商品推薦、跑馬燈商品、會員訂單查詢。因此筆者必須掌握這些重點,把網站以最短時間製作出來。
雖然案件很急很趕,但筆者認為心思不能跟著急跟著趕,否則會對於品質有影響。因此還是必須藉由基本的分析,來勾勒出網站的樣貌。
這件案件是有風險的,所為風險就是需求者並沒有提供非常詳細的資料,甚至連網站的排版也沒有說明,因此很有可能網站做出來之後,因為網站風格、排版等問題,而被打回票。因此設計網站排版之前,筆者就已經嘗試與案主溝通概念,替案主建立網站可能的樣貌,避免網站重作的風險。
2 需求¶
表格 1 「網路購物網站」系統目的分析表
| 版本:1.0 | 要做什麼 | 不要做什麼(不要做不代表不會做) |
|---|---|---|
| 能做什麼 | (第一格:必要項目) | (第二格:次要項目) |
| 會員管理功能,可讓會員於線上登錄資料,並且直接成為會員。 | 預設多國語言網的資料架構。 | |
| 購物車,必須能夠於任何商品項目中隨時加入。並且可以檢視購物車的資料。 | 提供更完善的會員管理功能,讓會員管理介面上線,可以直接在線上新增、刪除、修改會員資料。 | |
| 購物車,可以自由刪除或增加項目。 | 增設訂單處理流程,讓訂單處理有一系列的標準作業程序(SOP)。 | |
| 商品類別管理,必須由線上操作,透過資料的填寫,就可以修改或新增。 | 提供商品議價功能。 | |
| 商品類別管理,可以刪除類別。 | 提供評價商品的機制。 | |
| 類似商品推薦,當使用者點選某一項商品時,必須要有空間展示相類似的商品推薦。 | 提供留言板的功能。 | |
| 跑馬燈商品,讓使用者更多選擇,不限於商品類型,各種商品都可以在跑馬燈商品中顯示。 | 設計預購商品功能。 | |
| 跑馬燈商品,跑馬燈商品項目也要可以直接放入購物車。 | ||
| 會員訂單查詢,直接顯示會員所購買的商品項目。 | ||
| 會員訂單查詢要簡單易懂。 | ||
| 不能做什麼(不能做代表不需要做) | (第三格:不必要項目) | (第四格:不需要項目) |
| 提供商品類別的論壇。 | 使用資料探勘(Data Mining)演算法,進行商品推薦。 | |
| 替會員建立打折及積點機制。 | 為整套系統建立標準的作業程序,並導入WorkFlow。 | |
| 列出銷售排行榜。 | ||
| 會員加入必須驗證電子郵件。 |
表格 2 「網路購物網站」系統目標分析表
| 版本: | 重要 | 不重要 |
|---|---|---|
| 優先 | (重) | (急) |
| 購物車,必須能夠於任何商品項目中隨時加入。並且可以檢視購物車的資料。 | 會員管理功能,可讓會員於線上登錄資料,並且直接成為會員。 | |
| 購物車,可以自由刪除或增加項目。 | 跑馬燈商品,跑馬燈商品項目也要可以直接放入購物車。 | |
| 商品類別管理,必須由線上操作,透過資料的填寫,就可以修改或新增。 | ||
| 商品類別管理,可以刪除類別。 | ||
| 會員訂單查詢,直接顯示會員所購買的商品項目。 | ||
| 會員訂單查詢要簡單易懂。 | ||
| 不急迫 | (輕) | (緩) |
| 類似商品推薦,當使用者點選某一項商品時,必須要有空間展示相類似的商品推薦。 | 預設多國語言網的資料架構。 | |
| 跑馬燈商品,讓使用者更多選擇,不限於商品類型,各種商品都可以在跑馬燈商品中顯示。 |
表格 3 「網路購物網站」系統規格表
| 規格項目 | 規格內容 | 備註 |
|---|---|---|
| 會員管理功能 | 來賓可以直接於線上登錄,成為會員。 | … |
| 購物車 | 購物車要能列出清單、刪除項目、計算金額。 | … |
| 商品類別管理 | 可以透過線上新增、刪除、修改主要類別。 | … |
| 可以透過線上新增、刪除、修改商品項目。 | ||
| 可以透過線上設計會員可見的商品類別或項目。 | ||
| 類似商品推薦 | 可以判斷來賓點選的商品,而列出相關的商品。 | … |
| 跑馬燈商品 | 可以列出商品名稱、價錢、放入購物車。 | … |
| 商品不分類別,隨時得以列出項目跑在網頁上。 | ||
| 會員訂單查詢 | 自動替訂單編號,列出商品訂購的項目。 | … |
| 列出訂購會員的基本資料。 |
3 特色¶
特點在於快速建置電子商務網站,並提供會員管理、購物車、商品類別管理。用最短時間建設起來。
可應用於各行各業。
4 使用工具¶
| 語言 | 軟體 |
|---|---|
| ASP、JavaScript | Macromedia Dreamweave、MS FrontPage、MS Access、Adobe Photoshop CS、Ulead PhotoImpact、Adobe ImageReady CS |
5 系統架構¶
在設計本網站的時候,由於沒有預先的排版風格,因此完全以功能導向來設計,筆者將功能以頁框(Frame)的方式切開,並分門別類,以應付隨時的修改。若某一項功能需要修改,只需要調出要修改的網頁,進行修改即可。
在網站格式排版方面,筆者提出主要商品詳細內容於網頁中央,因為這是目視最直接的地方,而網頁推薦在商品詳細內容的右方,並以縮圖的方式列出相關的商品。跑馬燈其實很少人會去注意,因此放在上方,一列有縮圖及價錢和隨時加入購物車的按鈕。而不變動的是網站的標題頁以及商品目錄分類的區域,筆者認為來賓可以藉由商品目錄分類可以隨時切換,而不用點選上一頁、下一頁的按鈕來切換網頁。
而管理功能筆者為求快速,直接設計在商品目錄分類中的其中一項,只要以管理者的帳號登入後,就可以看到管理功能,可以在這裡管理商品目錄,以及訂單查詢。並沒有將會員資料管理列入的原因,是因為該網站所需的會員功能甚少,只要使用MS Access管理即可,並沒有需求在線上作管理。
最特別的一點就是樹狀目錄管理功能,這一點十分方便,若有任何功能必須增加,您只要將焦點放置在該功能,完成之後。透過樹狀目錄管理建立連結,直接就可以將新功能上線,而無須特別設計連結,這就是樹狀目錄管理的好處。
6 程式實作¶
首先我們來認識整個網站的檔案目錄架構,先建立起概念,對於往後修改時會有所助益。請參考如圖 1 以及表格 4。
圖 1 網站檔案目錄架構
表格 4 網站檔案目錄說明
| 目錄名稱 | 目錄說明 |
|---|---|
| =GoodsImages= | 存放商品的圖檔,子目錄編碼與商品編號相同。 |
| =TreeMenu= | 關於管理樹狀項目的功能。 |
| TreeMenu-AddItem | 關於新增項目的功能。 |
| TreeMenu-DelItem | 關於刪除項目的功能。 |
| TreeMenu-EditItem | 關於修改項目的功能。 |
| -DB- | 存放資料庫的目錄。 |
| zh-tw.big5 | 以語系為名的目錄,預備往後多國語言網站的架構。 |
| Car | 購物車的功能。 |
| Goods | 商品展示的功能。 |
| Member | 加入會員的功能。 |
| Menu | 網頁主架構。 |
6.1 網站主架構¶
Step 1:網站由上往下區分三塊,上面區塊式網頁標題區,中間區塊是網頁主體區,下面區塊是版權及連絡資訊區。而中間主體區又可分為兩塊,左邊區塊是樹狀目錄區,右邊是商品資訊區。如圖 2 所示。
圖 2 網站主架構
Step 2:首先我們來看最主要的部分,也就是樹狀目錄,檔案名稱是 menu02.asp。請參考以下程式碼。
<%
'禁止網頁被快取
Response.Expires = 0
%>
<%
'藉由表單取得帳號
get_uiLN = Request.Form("textfield1")
'藉由表單取得密碼
get_uiLP = Request.Form("textfield2")
'假設來賓代碼為空
If Len(Session("uiID")) = 0 Then
'設定SESSION為瀏覽者等級
Session("uiID") = "00000000000000"
Session("uiNN") = "貴賓"
Session("uiLN") = "guest"
Session("uiLV") = ""
End If
%>
<html>
<head>
<title>3c電腦館會員交易小型網站</title>
<meta http-equiv="Content-Language" content="zh-tw">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<!--設定超連結網頁開啟目標-->
<base target="menu02">
<style type="text/css">
<!--
body {
background-image: url(-images/menu02-bg.jpg);
}
.btnRefresh {
font-size: 12px;
font-weight: normal;
color: #FFFFFF;
background-color: #990000;
border-top-style: solid;
border-right-style: solid;
border-bottom-style: solid;
border-left-style: solid;
border-top-color: #000000;
border-right-color: #000000;
border-bottom-color: #000000;
border-left-color: #000000;
}
.tf {
font-size: 12px;
font-weight: normal;
color: #990000;
background-color: #FF9999;
border: thin solid #FF6666;
}
.style3 {color: #FFFFFF; font-size: 12px; }
-->
</style>
</head>
<body topmargin="0" leftmargin="0" bgcolor="#FFCC66">
<STYLE type="text/css">
<!--
BODY {
scrollbar-face-color:#9CC7F7;
scrollbar-highlight-color:#FFFFFF;
scrollbar-3dlight-color:#1875D6;
scrollbar-darkshadow-color:#000000;
scrollbar-shadow-color:#808080;
scrollbar-arrow-color:#000000;
scrollbar-track-color:#9CC7F7;
}
-->
</STYLE>
<%
' 設定資料夾是否也需要作超連結的功能
' 0 = 不啟用 , 1 = 啟用
Folder_Link = 1
'假設不啟用資料夾超連結
if Folder_Link = 0 Then
%>
<script src="./-JScript-/ftiens4.js"></script>
<%
'假設啟用資料夾超連結
Else
%>
<script src="./-JScript-/TreeCreation1.js"></script>
<%
End if
%>
<%
'宣告資料庫連結物件
DIM objCnn
'宣告SQL命令文字字串變數
DIM strSQL_TREM
DIM strSQL_UI
DIM strSQL_tremMenu
'宣告計數器變數
DIM intf
'宣告項目編號字串變數
'DIM strTremMenuID
'宣告根目錄字串變數
'DIM strRoot
'建立資料庫連結物件
SET objCnn = Server.CreateObject("ADODB.Connection")
'開啟資料庫
objCnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("../../-DB-/UI.mdb")
'建立資料錄物件
SET objRst_UI = Server.CreateObject("ADODB.Recordset")
'當有輸入帳號密碼時
If Len(get_uiLN) > 0 And Len(get_uiLP) > 0 Then
'設定查詢帳號及密碼是否正確的SQL命令文字字串
strSQL_UI = "SELECT Distinct [編號],[暱稱],[帳號] FROM [UI] WHERE [帳號] LIKE '" & get_uiLN & "' AND [密碼] LIKE '" & get_uiLP & "'"
'反之
Else
'採用來賓帳號登錄
strSQL_UI = "SELECT Distinct [編號],[暱稱],[帳號] FROM [UI] WHERE [帳號] LIKE '" & Session("uiLN") & "'"
End If
'開啟資料錄
objRst_UI.Open strSQL_UI,objCnn,3,1
'若有資料
If objRst_UI.EOF = False Then
'判斷只有一筆資料
If objRst_UI.RecordCount = 1 Then
'則將會員資料設定到SESSION
Session("uiID") = Trim(objRst_UI("編號"))
Session("uiNN") = Trim(objRst_UI("暱稱"))
Session("uiLN") = Trim(objRst_UI("帳號"))
Session("uiLV") = ""
'宣告選單資料錄物件
SET objRst_tremMenu = Server.CreateObject("ADODB.Recordset")
'設定會員選單SQL命令文字
strSQL_tremMenu = "SELECT Distinct * FROM [tremMenu] WHERE [uiID] LIKE '" & Session("uiID") & "'"
'開啟資料錄
objRst_tremMenu.Open strSQL_tremMenu,objCnn,3,1
'巡覽所有資料錄
Do Until objRst_tremMenu.EOF = True
'將選單識別碼連結成字串
strTremMenuID = strTremMenuID & objRst_tremMenu("tremID") & "','"
'將資料錄移動到下一筆
objRst_tremMenu.MoveNext
Loop
'關閉資料錄
objRst_tremMenu.Close
'釋放記憶體空間
Set objRst_tremMenu = Nothing
'若沒有資料
Else
'錯誤處理
End If
End If
'關閉資料錄
objRst_UI.Close
'釋放記憶體空間
Set objRst_UI = Nothing
%>
<script>
<!--
strRoot = gFld("<font face='新細明體' size='3' color='#FFFFFF' style='width: 150; height: 12;filter=glow(color=#FFAC00, strength=6)' class=coffee ><%=Session("uiNN")%> 您好,<b>~歡迎光臨~</b></font>", "")
<%
'宣告載入樹狀目錄副程式
Sub Load_Tree(strNode)
'宣告計數變數
intf = intf + 1
'宣告資料錄選單物件
SET objRst_TREM = Server.CreateObject("ADODB.Recordset")
'設定選單SQL命令文字
strSQL_TREM = "SELECT Distinct tremID,tremPID,tremSort,tremName,tremURL,tremType FROM [tremFolder] " & _
"WHERE [tremPID] LIKE '" & strNode & "' AND [tremID] IN ('" & strTremMenuID & "') Order By [tremSort]"
'開啟資料錄
objRst_TREM.Open strSQL_TREM,objCnn,3,1
'若有資料
IF Not objRst_TREM.EOF Then
'巡覽所有資料錄
for i = 0 to objRst_TREM.RecordCount -1
'若發現根目錄代碼
if strNode = "TREM0" then
'設定計數值為1
intf = 1
end if
'若資料錄存在根目錄代碼
IF objRst_TREM("tremPID") = "TREM0" Then
'判斷子目錄型態是否為D,D=資料夾
IF objRst_TREM("tremType") = "D" Then
'假設不用超連結
if Folder_Link = 0 Then
'超連結字串設為#
URL_TEXT = "#"
'啟用超連結
Else
'設定超連結文字
URL_TEXT = objRst_TREM("tremURL")
End if
'建立目錄資料夾的JavaScript命令文字
%>aux<%=intf%> = insFld(strRoot, gFld("<%=objRst_TREM("tremName")%>","<%=URL_TEXT%>"))<%
'顯示換行
Response.Write chr(10)& chr(13)
'使用遞回函式繼續加入子目錄或子連結
Load_Tree(objRst_TREM("tremID"))
'反之,子目錄型態為超連結
Else
'建立子連結的JavaScript命令文字
%>aux<%=intf%> = insDoc(strRoot, gLnk(0, "<%=objRst_TREM("tremName")%>","<%=objRst_TREM("tremURL")%>"))<%
'顯示換行
Response.Write chr(10)& chr(13)
End if
'若沒有根目錄,這是給子資料夾或子連結用的
ELSE
'則判斷資料夾型態是否為D
IF objRst_TREM("tremType") = "D" Then
'若不啟用超連結
if Folder_Link = 0 Then
'超連結文字設為#
URL_TEXT = "#"
'若啟用超連結
Else
'設定超連結文字
URL_TEXT = objRst_TREM("tremURL")
End if
'設定資料夾的JavaScript命令文字
%>aux<%=intf%> = insFld(aux<%=intf-1%>, gFld("<%=objRst_TREM("tremName")%>","<%=URL_TEXT%>"))<%
'顯示換行
Response.Write chr(10)& chr(13)
'使用遞回函式繼續加入子資料夾或子連結
Load_Tree(objRst_TREM("tremID"))
'反之
Else
'設定子連結的JavaScript命令文字
%>insDoc(aux<%=intf-1%>, gLnk(0, "<%=objRst_TREM("tremName")%>","<%=objRst_TREM("tremURL")%>"))<%
'顯示換行
Response.Write chr(10)& chr(13)
End if
End if
'將資料錄移動到下一筆
objRst_TREM.MOVENEXT
Next
End if
'計數器減1
intf = intf - 1
'關閉資料錄
objRst_TREM.Close
'釋放記憶體空間
SET objRst_TREM = Nothing
End Sub
'由根目錄開始載入樹狀目錄
Call Load_Tree("TREM0")
'關閉資料庫連結
objCnn.Close
'釋放記憶體空間
SET objCnn = Nothing
%>
<!--初始化樹狀目錄-->
initializeDocument()
-->
</script>
<%
'當來賓為瀏覽者等級
If Session("uiID") = "00000000000000" Then
%>
<input name="Submit" type="button" class="btnRefresh" onClick="javascript:location.reload()" value="重新整理目錄">
<form name="form1" method="post" action="">
<br>
<table width="90%" border="1" align="center" cellspacing="0" bordercolor="#330000">
<tr>
<td bgcolor="#990000" scope="row"><div align="center"><span class="style3">會員帳號</span></div></td>
<td bgcolor="#993333">
<input name="textfield1" type="text" class="tf" id="textfield1" size="20" maxlength="20"> </td>
</tr>
<tr>
<td bgcolor="#990000" scope="row"><div align="center"><span class="style3">會員密碼</span></div></td>
<td bgcolor="#993333">
<input name="textfield2" type="password" class="tf" size="20" maxlength="20"></td>
</tr>
<tr>
<th colspan="2" bgcolor="#FF3300" scope="row"><input name="Submit2" type="submit" class="btnRefresh" value="登入會員"></th>
</tr>
</table>
</form>
<%
End If
%>
</body>
</HTML>
6.2 網站操作流程¶
Step 1:如圖 3,這是首頁畫面,我們先來看管理者功能,帳號預設為admin,密碼預設為1234。請點選登入會員按鈕。
圖 3 首頁
Step 2:如圖 4 所示,登入管理者等級之後,就可以看到增加了 Web Admin、Menu Manager、All Order List Manager 的選項。其中 Menu Manager 是代表樹狀目錄管理,您可以在這裡新增、刪除、修改樹狀目錄結構。而 All Order List Manager 是訂單所有資料。
圖 4 管理者功能
Step 3:如圖 5 所示,在商品項目中我們可以看到中央畫面就是點選的商品詳細資料,而右邊的區域就是推薦的相關商品,上面的跑馬燈商品也會以動態的方式由右往左推進。而紅色的加入購物車按鈕,得以隨時點選加入購物車。
圖 5 瀏覽商品
Step 4:如圖 6 所示,點選我的購物車之後,購物車可以列出所勾選的物品,倘若物品購買兩項以上,購物車會自動把相同物品的數量自動累計,而每個項目前都有一個核取框,可以勾選取消構物項目,或者選擇繼續購物,或是結帳。
圖 6 購物車
Step 5:如圖 7 所示,點選加入會員之後,會出現登錄表格,新會員只要填寫完畢後,馬上就可以以會員的身分登錄了。
圖 7 加入會員
Step 6:如圖 8 所示,訂單列表可以把所有訂購資訊包含會員基本資料都詳細的列出來。
圖 8 訂單資訊
7 修改重點¶
對於本網站的美工部分可以再重新的設計,以符合您的需要。目前筆者將功能區塊以不同背景顏色區分,您可以透過整體設計,再做切割,這樣的設計會更具美感。
本網站目前缺少的功能就是訂單管理,目前訂單管理僅只有列出詳細資料而已,這對於營業量不大的網站是足以負荷,但隨著營業量的日益增加,僅有列出訂單資訊的方式,是不敷使用的。因此筆者建議讀者要修改的話可以先朝向訂單管理功能來做設計,這樣修改能夠讓您快速的建立功能齊全的購物網站。其次才是會員管理的功能。
其實本網站可藉由樹狀目錄管理,而增加任何的功能,非常具有彈性,例如:會員資料線上管理、留言板、論壇、商品銷售排行榜、會員積點折扣管理、…、商品銷售報表、等等。而且擴充功能的時候,您只需要將該功能完成,再透過樹狀目錄管理建立連結,就可以替網站建立新功能。而不必想說新功能應該擺放在哪裡,這就是模組化的好處,您可以設想每一項功能就是一組具有模組化功能的網頁,如此的設計概念,將有助於以後網站擴充的機制。說簡單一點,加新功能就是換個模組就行了。
8 結論¶
由於能在短時間內完成,獲得案主良好的評價,甚至願意擔任筆者的推薦人。能夠在短時間內完成,最主要是有做到溝通,在網站還沒有任何概念型成之前,使用文字的方式勾勒出網站的樣貌,以避免網站製作之後,與需求距離過遠。整個網站就是以樹狀目錄為起點,連結各個網站的功能,如此設計時就可以將焦點放在要設計的目標上,而無須設計成相互複雜關連的網站,每個網站功能都可以獨立作業,這樣的設計才可以有效的隨時置換功能。
9 備註¶
本網站的樹狀目錄結構的原始碼是由 Marcelino Alves Martins 所設計的,你可以免費的取得及使用,不過要註明原創者的姓名以及不得刪除任何的描述文字,筆者十分感謝 Marcelino Alves Martins 無私的提供這個好用的程式碼,但由於本網站的需要,略為修改了原創的原始碼,以求更符合需求。讀者可以參考看看。
此外,如果您架設的網站是使用IIS 6.0的話,必須允許使用上層目錄,否則程式無法獲得正確的目錄,而無法執行。若是IIS 5.0以下的版本,則無此問題。