一、前言
繼上次的訂單,這是第四篇。記錄一下分類和篩選。這功能是最后做的,因為我完全不懂其原理。后來通過同學的指導(一位很有天賦的同學,比我牛逼一個層次,同樣是高三。:D),終於也是完成了。在寫這篇博客之前還有點半懂不懂,經過些許時間的思考,終於全懂了,可以將其寫下來。
二、開始
1.先看一下表設計
然后二級類別:
最后商品信息表里面需要這樣:
兩個ID分別對應Sort1和Sort2.
2.前台
前台的話,正是用了URL傳值,不知道淘寶天貓用的是哪種傳值。那么先來看一下自己做的效果:
此時后台該是直接加載:
public void dataload() { SqlDataSource4.SelectCommand = "select * ,(CASE WHEN datalength(Goods_name) <= 12 THEN Goods_name ELSE SUBSTRING(Goods_name, 1, 12) + '...' END) AS Goods_name1 FROM GoodsInfo " + ((Request.QueryString["Ord"] != null) ? "order by " + Request.QueryString["Ord"].ToString() : ""); }
顯示出來所有商品。
(2):點擊一級類別中的任意一個,出現:。當然底下商品也隨之變動了,他的前台用了一個URL:
<a href="NewGoods.aspx?SID1=<%#Eval("Sort_ID")%>" class="sortboxtext"><%#Eval("Sort_name")%></a>
后台加載時加入條件:
public void dataloadgoods() { SqlDataSource4.SelectCommand = "select * ,(CASE WHEN datalength(Goods_name) <= 12 THEN Goods_name ELSE SUBSTRING(Goods_name, 1, 12) + '...' END) AS Goods_name1 FROM GoodsInfo where GS_id ='" + Request.QueryString["SID1"] + "'" + ((Request.QueryString["Ord"] != null) ? "order by " + Request.QueryString["Ord"].ToString() : ""); }
可以看到from GoodsInfo where 后面的條件:GS_id = (此處就是前台傳過來的URL了)。
(3)點擊一級類別后,再點擊二級類別,出現:。底下商品隨之變動。
前台:
<a href="NewGoods.aspx?SID1=<%#Eval("GS_ID")%>&SID2=<%#Eval("Sort2_ID")%>" class="sortboxtext2"><%#Eval("Sort_name")%></a>
后台:
public void dataloadgoods2() { SqlDataSource4.SelectCommand = "select * ,(CASE WHEN datalength(Goods_name) <= 12 THEN Goods_name ELSE SUBSTRING(Goods_name, 1, 12) + '...' END) AS Goods_name1 FROM GoodsInfo where GS_id ='" + Request.QueryString["SID1"] + "' and GS2 = '" + Request.QueryString["SID2"] + "'" + ((Request.QueryString["Ord"] != null) ? "order by " + Request.QueryString["Ord"].ToString() : ""); }
(4)此頁面中還有一個排序,也就是篩選,當你點擊“價格”或是”最新發布”時,出現:。可以看到在SID2后面有一個&,&后面還有一個條件
前台:
<a href="NewGoods.aspx?<%=((Request.QueryString["SID1"] !=null)?"SID1="+Request.QueryString["SID1"].ToString():"") %>&<%=((Request.QueryString["SID2"] !=null)?"SID2="+Request.QueryString["SID2"].ToString():"") %>&Ord=In_store_price" class="seqencingtext">價格</a>
用了三目運算符,如果不為空,就將SID1、SID2以及Ord傳到后台,Ord是自己定義的一個URL名稱。Ord=(此處的名稱,應該跟你數據庫中字段對應)
后台跟上面的二級類別一樣,只不過上面前台沒有Ord,后台的Ord就是空了。這個前台多了一個Ord,后台獲取也就多了一個:
public void dataloadgoods2() { SqlDataSource4.SelectCommand = "select * ,(CASE WHEN datalength(Goods_name) <= 12 THEN Goods_name ELSE SUBSTRING(Goods_name, 1, 12) + '...' END) AS Goods_name1 FROM GoodsInfo where GS_id ='" + Request.QueryString["SID1"] + "' and GS2 = '" + Request.QueryString["SID2"] + "'" + ((Request.QueryString["Ord"] != null) ? "order by " + Request.QueryString["Ord"].ToString() : ""); }
可以看到,最后Ord不為空,那么就order by Ord了。
(5)最后一種情況:
這個只需要在前台的Radlistview中加入:
<telerik:RadListView ID="RadListView3" runat="server" AllowPaging="True" ItemPlaceholderID="item" PageSize="15" DataSourceID="SqlDataSource4"> <EmptyDataTemplate> <div class="tiptext">暫無此商品!</div> </EmptyDataTemplate>
就可以了。
以上,就是二級分類的基本內容了,不知道天貓淘寶是怎么實現的。每個瀏覽器可傳的URL長度不同,不過在這個項目里,還達不到2000多字符那種長度,不知道其他人是怎么弄的,希望懂的大神教教我。另外這URL的安全性也是問題,不知道怎么弄,也希望會的教一下。謝謝大家支持!
ps:記錄到這,整個項目就基本差不多結束了,可能是最后一篇了。