• 沒有找到結果。

圖畫區子系統

在文檔中 ASP.NET實作網路虛擬社群 (頁 80-89)

3.5 各區說明

3.5.2 圖畫區子系統

lblkey.Text = Request.Params["txtKey"];網址列變數,代表要搜尋的關鍵字

lblwork.Text = Request.Params["txtKind"] ; 網址列變數,代表要執行的工作(搜尋/一般/類型) lbltitle.Text = Request.Params["Title"] ; 網址列變數,代表要搜尋的類型(作者/標題/介紹) lblpre.Text = Request.Params["txtPre"] ; 網址列變數,代表討論文章的頁數

程 式 流 程

1. 若執行的工作為搜尋 if(lblwork.Text == "5"),則看搜尋類型決定用哪個 sql 命令 2. 若不是搜尋則 SelectCmd = set_state();從資料表中讀取指定範圍的資料

s = "Select draw_id From draw_data WHERE ok_flag = 1 Order By draw_id DESC";

3. 此程式讀取部分很簡單,重點在於 html 部分的 DataList

<asp:DataList id="pic_table" runat="server" RepeatDirection="Horizontal" >

此 DataList 採橫向排列,在 DataList 樣板指定表格格式(含外圍的畫框、中間的圖畫及下 方的畫作資訊),總共有三層表格:

(1) 分隔〔換頁〕下拉選單&圖畫作品的表格(橫向切成三格,中間是投稿,左右兩邊是

選單)

(2) 中央投稿部分是一個 DataList,DataList 中又分成上下切成兩格的表格,上面放圖畫,

下面放畫作資訊

(3) 圖畫的畫框又是一個表格,切成 3*3 的九宮格,外圍八格設定畫框,中間放圖畫縮 圖。此表格要注意畫框的圖片大小與表格欄位大小的設定

展示介面-投稿作品:點選大廳的縮圖後會出現詳細投稿資料

圖 74 投稿作品畫面

檔 名 draw_detail.aspx 使用資料表 draw_data

使 用 變 數

lblpre.Text = Request.Params["txtPre"] ; 網址列變數,紀錄討論串的頁數

lblopen.Text = Request.Params["open"] ; 網址列變數,紀錄開啟的模式(圖畫/討論串) lblid.Text = Request.Params["txtID"] ; 網址列變數,紀錄圖畫編號

程 式 流 程 1. 先讀取此畫作的標題(標題為圖畫&討論串共用)

SelectCmd = "select draw_title from draw_data Where draw_id = " + lblid.Text;

順便設定回覆表格的標題 title.Text = "Re:" + lblset.Text;

2. 依照功能決定要讀取哪個資料表 switch(lblopen.Text) 開啟圖畫:case "draw":

SelectCmd = "Select * From draw_data Where draw_id = " + lblid.Text;

讀取資料後交給 DataList "pic_detail"顯示 開啟討論串 case "list":

SelectCmd = set_state();

此部分參照系統維護手冊 1.5,set_state()的部分請見 7.1 3. 此頁程式不太複雜,主要是設計得讓讀者方便使用&觀看

3.5.3 商店街子系統

lblno.Text = Request.Params["txtno"].ToString() ; 網址列變數,紀錄顯示的筆數

lblkind.Text = Request.Params["txtkind"].ToString() ; 網址列變數,紀錄顯示的模式(類型/新品 /開張/店長)

程 式 流 程 1. 以 switch(lblkind.Text)決定要作的 SELECT 是哪一種

case "0":預設模式,會顯示最新開張的五間商店

SelectCmd = "Select TOP 5 * From shop ORDER BY open_date desc";

case "1":顯示指定編號的商店

SelectCmd = "Select * From shop WHERE class_no = " + lblno.Text;

case "2":顯示最近更新商品的 lblno.Text 間商店

SelectCmd = "Select TOP " + lblno.Text + " * From shop ORDER BY new_item_date desc";

case "3":顯示最近開張的 lblno.Text 間商店

SelectCmd = "Select TOP " + lblno.Text + " * From shop ORDER BY open_date desc";

case "4":顯示指定店長編號的商店

SelectCmd = "Select * From shop WHERE mem_no = " + lblno.Text;

2. 決定好 sql 命令後交由 DataList 顯示

DataList1.DataSource = Create_Table("novel", SelectCmd ,"shop") ; DataList1.DataBind() ;

3. 此網頁的讀取部分也很簡單,主要是 DataList 的設計,以及方便使用者點選及瀏覽動線 (順序為:上方選擇顯示類型Æ左半邊出現商店列表Æ點選連結另開視窗顯示商店內部) 此方式不會影響商店列表的位置順序,看完第一間店後可以清楚自己知道逛到哪裡

展示介面-商店內部:點選商店名稱後會開啟商店內部的視窗

圖 76 商店內部畫面

檔 名 store_detail.aspx

使用資料表 shop PRODUCTION

使 用 變 數

lblstore_no.Text = Request["txtstore_no"] ; 網址列變數,紀錄商店編號 程 式 流 程

1. 只要開啟商店頁面就會更新點閱人數

UpdateCmd = "Update shop Set store_hit = store_hit+1 Where store_no = " + lblstore_no.Text ;

2. 以 cookie 來判斷使用者是否登入 if(Request.Cookies["id"] != null && log == "yes")

若無登入則顯示 lblerror.Text = "你還沒登入,無法購買喔!";並且〔放入購物車〕的按鈕 會變成灰色無法使用

3. 從 shop 資料表讀取商店店名,店長,圖片,及簡介等相關資料,並將資訊紀錄在 lblstore_inf.Text 當中

SelectCmd = "Select * From shop Where store_no = " + lblstore_no.Text;

4. 從 PRODUCTION 資料表讀取屬於該商店的商品資料,交給 DataList 顯示

SelectCmd = "Select * From PRODUCTION Where store_no = " + lblstore_no.Text + "AND delete_flag != 2 ORDER BY pro_id desc";

5. DataList 中的<asp:CheckBox id="chk1" runat="server"/>勾選項目是用來放物購物車用 的,可以多選。〔放入購物車〕的按鈕會呼叫 btn_put 副程式

6. btn_put 副程式:

(1) 檢查使用者是否有登入,若無則顯示 lblerror.Text = "你還沒登入,無法購買喔!";(理 論上應該是不太可能這樣,因為放入購物車這按鈕本身在沒登入的狀況是無法使用的,

但是為了避免例外情況,如先開啟商店後再登出,按鈕還是可以用的,但這樣要放物品 到購物車是不可行的)

(2) 若有登入則逐筆檢查哪些項目有被勾選

foreach (DataListItem CheckBoxItem in DataList1.Items)

IsChecked = ((CheckBox)CheckBoxItem.FindControl("chk1")).Checked;

(3) if(IsChecked)若此項被使用者選定放入購物車,則先檢查此物品是否已存在購物車中 SelectCmd = "Select pro_id From SHOPPING_CART Where mem_no =" + lblno.Text + " and pro_id =" + lblShow2.Text;

(4) 已經存在,只是要做購買數量(buy_count)&日期的更新

UpdateCmd = "Update SHOPPING_CART Set buy_count = buy_count + 1 ,put_date = getdate() Where mem_no = " + lblno.Text + " and pro_id = "+ lblShow2.Text + "" ; (5) 若不存在,就新增資料到資料表中

InsertCmd = "Insert Into SHOPPING_CART(mem_no,pro_id,buy_count) Values('" + lblno.Text + "','" + lblShow2.Text + "','1')" ;

(6) 更新或新增結束後,導引網頁到 store_cart.aspx,也就是購物車的頁面,顯示給使用 者看(購物車詳細見系統維護手冊 3.5)

7. 上方有快速功能〔購物車〕可讓使用者觀看先前放了哪些物品等待結帳。〔討論板〕會連 結到商店街專用的討論區。〔回商店〕則是讓使用者在購物車及商店之中互換。〔前 後〕

則是可以往上往下瀏覽其他商店,設計給逛街的人使用。

購物車:選取物品後,或是打開購物車會看到的頁面,可將商品結帳

圖 77 購物車畫面

檔 名 store_cart.aspx

使用資料表 SHOPPING_CART PRODUCTION 使 用 變 數

lblstore_no.Text = Request["txtstore_no"] ;網址列變數,用來紀錄剛才逛到的商店編號,方便 跳回商店畫面時使用

程 式 流 程

1. 若剛才是由商店選完物品,並成功加入購物車,會設定 txtkind = succ,此時會顯示 lblerror.Text = "成功放入購物車!";的字樣通知使用者

2. 用 COOKIE 判定使用者是否有登入,若有則使用會員編號,去 SHOPPING_CART 抓取 資料,由 show_cart()副程式執行(因其他部分常會用到此段程式,因此獨立出來作成副程 式)

3. show_cart()副程式:

(1) 綜合讀取 SHOPPING_CART PRODUCTION 的資料(購物資料及物品資料) SelectCmd = "Select * From SHOPPING_CART,PRODUCTION Where mem_no = " + lblno.Text + " AND PRODUCTION.pro_id = SHOPPING_CART.pro_id" ;

用此 sql 命令將資料交給 DataList

(2) 用 pro_prise,buy_count 計算總合金額,顯示在〔我要結帳〕按鈕上方讓使用者看到 4. 〔繼續購物〕按鈕,呼叫 btn_conti 副程式,會將網頁導回商店頁面

5. 〔我要結帳〕按鈕,呼叫 btn_over 副程式 (1) 先讀取使用者資料,判斷存款是否足夠

SelectCmd = "Select mem_money,mem_exp_set,mem_work_set,mem_atri From MEMBER Where mem_no = " + lblno.Text + "" ;

若不夠會提醒使用者減少商品數量,並告知現有存款

lblerror.Text = "你的錢不足,無法購買!請減少商品。(您目前存款為:" + money + "元)";

(2) 從 SHOPPING_CART PRODUCTION 讀取資料(購物資料&物品資料)

SelectCmd = "Select * From SHOPPING_CART,PRODUCTION Where mem_no = " + lblno.Text + " AND PRODUCTION.pro_id = SHOPPING_CART.pro_id Order by SHOPPING_CART.pro_id asc" ;

(3) 逐筆判斷是否符合購買資格(等級 / 屬性 / 職位限制),若檢查通過則 limit_flag == 0 (4) 判斷購買數量是否小於等於庫存

item_count= (int)reader["pro_count"] - (int)reader["buy_count"];

if(item_count >= 0)

(5) 若檢查都通過則進行交貨手續: 是使用 Datalist 內建的命令項目 CommandName="Update"、

CommandName="Edit"、CommandName="Delete"

在文檔中 ASP.NET實作網路虛擬社群 (頁 80-89)

相關文件