類似于京東商城等的商品分類搜索篩選功能實(shí)現(xiàn)
前言 隨著電子商務(wù)的迅速發(fā)展,各大專業(yè)和獨(dú)立蓬勃而出。如京東,凡客等為眾人皆知的。作為一個(gè)技術(shù)領(lǐng)域的人來說,我們會(huì)更多的看到其中的技術(shù)差別。今天我們就來說一下搜索結(jié)果中的篩選功能實(shí)現(xiàn)。這個(gè)問題有不少的朋友經(jīng)常問起他的實(shí)現(xiàn)原理,在這里我以我的實(shí)現(xiàn)方法來給大家講解一下。以期起到拋磚引玉的作用,希望能夠幫助到大家。 效果預(yù)覽 提供2張效果圖的預(yù)覽。如果您看不到圖片,請(qǐng)前往相應(yīng)的網(wǎng)址查看。 這個(gè)功能的實(shí)現(xiàn),歸根到底,是數(shù)據(jù)庫的設(shè)計(jì)問題。如果你的數(shù)據(jù)庫設(shè)計(jì)得比較好,那么實(shí)現(xiàn)起來是件輕而易舉的事情。另一方面,是網(wǎng)址傳參上的難度。由于需要對(duì)搜索引擎的收錄比較友好,通常商城類型的網(wǎng)址,都要進(jìn)行url重寫。本文將著手于這兩方面給大家講解。 數(shù)據(jù)庫設(shè)計(jì) 搜索屬性表 搜索屬性“值”表 一共是3張表。設(shè)計(jì)上比較簡(jiǎn)單。 簡(jiǎn)單歸簡(jiǎn)單,但是要注意看清中間的關(guān)系。另外要注意表中的冗余字段運(yùn)用。這可以為你在設(shè)計(jì)表的時(shí)候省去不少麻煩。當(dāng)然如果數(shù)據(jù)頻繁更新,你要記得同步數(shù)據(jù)。
后臺(tái)程序?qū)崿F(xiàn) 先看一下我們的界面圖 這是屬性綁定。我們的商品屬性很多。如果你們沒有屬性表,可以自己逐個(gè)添加屬性名稱即可。我們的實(shí)現(xiàn)是直接在系統(tǒng)的商品屬性中選取的。后面的數(shù)字文本框,是指排序?! ?br style="margin: 0px; padding: 0px; "> 效果1網(wǎng)址:http://sports./product/yumaoqiu.htm 上面的后臺(tái)程序?qū)崿F(xiàn)中,有個(gè)關(guān)鍵點(diǎn),就是里面有一個(gè)字段叫“搜索值”。這個(gè)搜索值,是用來查數(shù)據(jù)庫的。前臺(tái)顯示成“尤尼克斯/Yonex”,但是我們的數(shù)據(jù)庫中實(shí)際存放的值可能并不是它。而是“尤尼克斯”這個(gè)值,所以,需要進(jìn)行區(qū)分。 前臺(tái)程序?qū)崿F(xiàn) 由于需要實(shí)現(xiàn)Url重寫。您在演示網(wǎng)址中,能夠看到我們的演示網(wǎng)址,是已經(jīng)實(shí)現(xiàn)了URL路徑重寫功能的。這里需要注意的點(diǎn)是:“由于你不知道用戶會(huì)使用哪個(gè)篩選條件,所以,你在URL中,必須要保持用戶的所有已經(jīng)選擇的篩選條件”。您可以在演示網(wǎng)址中,看到這種網(wǎng)址變化效果。 那么這個(gè)網(wǎng)址的篩選是如何實(shí)現(xiàn)的呢? 首選是路徑重寫的配置。 這個(gè)配置的實(shí)現(xiàn)效果在http://sports./product/yumaoqiu-85-81-97.htm中可以全部看到。這個(gè)網(wǎng)址,已經(jīng)選取了相關(guān)的選項(xiàng)。譬如演示圖中的“品牌”、“重量”、“價(jià)格”。我們需要將用戶已經(jīng)選擇的這些多個(gè)條件在URL網(wǎng)址中保持起來。 還是以上面給的演示URL路徑來講解。http://sports./product/yumaoqiu-85-81-97.htm經(jīng)過URL重寫后,我們的RequestQuerystring["SearchPropertyID"]會(huì)得到這樣的一個(gè)值:“-85-81-97”,是一串?dāng)?shù)字。我們需要對(duì)它進(jìn)行解析,并保存下來,這一串?dāng)?shù)字代表了它們是用戶已經(jīng)選好了篩選條件。
解析URL參數(shù)的代碼如下: int[] searchPropertyValueIDArray = null; #region 解析Url屬性參數(shù) try tempSearchPropertyValueIDArrayList.Add(Convert.ToInt32(item)); searchPropertyValueIDArray = (int[])tempSearchPropertyValueIDArrayList.ToArray(typeof(int));
前臺(tái)顯示綁定的時(shí)候事件代碼如下: protected void SearchPropertyValueRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) bool isHasCurrentPropertyName = false; Sports_Category_SearchProperty sports_Category_SearchPropertyEntity = CategoryCache.SelectCategorySearchProperty(searchPropertyID); isHasCurrentPropertyName = true; string searchPropertyIDUrl = ""; //具體屬性
如此,我們就正式完成了這一個(gè)篩選的效果設(shè)計(jì)。
也許您會(huì)問,我有了“搜索的屬性值”,要怎么去查找出商品呢,怎么出價(jià)格區(qū)間呢?模糊匹配會(huì)不會(huì)影響性能呢?是的。這是需要注意和解決的問題。 在我們的程序里,用的商品分類索引,然后再用模糊匹配,性能很高。價(jià)格區(qū)間,是按價(jià)格來進(jìn)行Sql中的between篩選的。 請(qǐng)回頭看我們的這張圖: 您在圖中會(huì)看到一關(guān)鍵的地方,叫“屬性類型”。您在截圖上,只能看到“字符串”這一種,實(shí)際中,下拉列表中我們還有一種,叫“貨幣”。這些類型的不同,決定了,解析方式的不同。您現(xiàn)在應(yīng)該不會(huì)感到困惑了吧?!
關(guān)于文章作者的介紹 馬志遠(yuǎn)(Marc),1981年,2002年湖北大學(xué)肄業(yè),現(xiàn)蝸居廣州。2004年學(xué)習(xí)編程,至今已經(jīng)有8年的編程經(jīng)驗(yàn),長(zhǎng)期從事asp.net B/S方面的開發(fā)和設(shè)計(jì)。在項(xiàng)目解決方案上、在項(xiàng)目性能和擴(kuò)展等上,具有深強(qiáng)的能力。您可以使用mazhiyuan1981@163.com與我取得聯(lián)系。 |
|