乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      類似于京東商城等的商品分類搜索篩選功能實(shí)現(xiàn)

       CevenCheng 2012-05-13

      類似于京東商城等的商品分類搜索篩選功能實(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ù)覽

          效果1:
          

          效果2:

          

          提供2張效果圖的預(yù)覽。如果您看不到圖片,請(qǐng)前往相應(yīng)的網(wǎng)址查看。
          效果1網(wǎng)址:http://sports./product/yumaoqiu.htm
          效果2網(wǎng)址:http://sports./product/lunhuahuabang.htm
      實(shí)現(xiàn)原理

          這個(gè)功能的實(shí)現(xiàn),歸根到底,是數(shù)據(jù)庫(kù)的設(shè)計(jì)問題。如果你的數(shù)據(jù)庫(kù)設(shè)計(jì)得比較好,那么實(shí)現(xiàn)起來是件輕而易舉的事情。另一方面,是網(wǎng)址傳參上的難度。由于需要對(duì)搜索引擎的收錄比較友好,通常商城類型的網(wǎng)址,都要進(jìn)行url重寫。本文將著手于這兩方面給大家講解。


      數(shù)據(jù)庫(kù)設(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; ">    
          綁定的屬性名稱后,我們就會(huì)得到下圖所示的一個(gè)商品屬性表。當(dāng)然,剛開始綁定的時(shí)候,“屬性值”是空的。這里您看到“屬性值”這一列中有值,是因?yàn)槲覀円呀?jīng)綁定好了。
                       上面是“屬性”表。下面這張圖是為這些“屬性”添加“屬性值”。這些值,將被前臺(tái)顯示。具體的顯示效果,您可以看上面網(wǎng)址中的實(shí)際效果?!  ?/p>

          效果1網(wǎng)址:http://sports./product/yumaoqiu.htm
          效果2網(wǎng)址:http://sports./product/lunhuahuabang.htm

          

          很好,相信提供的這些頁(yè)面步驟,已經(jīng)能夠讓您了解到了后臺(tái)的制作的整個(gè)過程,至于數(shù)據(jù)庫(kù)的數(shù)據(jù)添加修改和刪除功能,這是每一個(gè)程序員最基本的,這里沒有什么技術(shù)含量,您直接代碼實(shí)現(xiàn)即可。

          上面的后臺(tái)程序?qū)崿F(xiàn)中,有個(gè)關(guān)鍵點(diǎn),就是里面有一個(gè)字段叫“搜索值”。這個(gè)搜索值,是用來查數(shù)據(jù)庫(kù)的。前臺(tái)顯示成“尤尼克斯/Yonex”,但是我們的數(shù)據(jù)庫(kù)中實(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ù)
                  //解析Url傳的屬性參數(shù)
                  if (!string.IsNullOrEmpty(searchPropertyIDReq))
                  {
                      ArrayList tempSearchPropertyValueIDArrayList = new ArrayList();
                      string[] tempSearchPropertyValueIDArray = searchPropertyIDReq.Split('-');
                      foreach (string item in tempSearchPropertyValueIDArray)
                      {
                          if (string.IsNullOrEmpty(item))
                          {
                              continue;
                          }

                          try
                          {
                              Convert.ToInt32(item);
                          }
                          catch
                          {
                              continue;
                          }

                          tempSearchPropertyValueIDArrayList.Add(Convert.ToInt32(item));
                      }

                      searchPropertyValueIDArray = (int[])tempSearchPropertyValueIDArrayList.ToArray(typeof(int));
                  }
                  #endregion

       

       

          前臺(tái)顯示綁定的時(shí)候事件代碼如下:

      protected void SearchPropertyValueRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
          {
              if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
              {
                  string curPropertyName = DataBinder.eval_r(e.Item.DataItem, "PropertyName").ToString();
                  string curPropertyValue = DataBinder.eval_r(e.Item.DataItem, "PropertyValue").ToString();
                  string curPropertyValueID = DataBinder.eval_r(e.Item.DataItem, "ID").ToString();

                  bool isHasCurrentPropertyName = false;
                  int? urlPropertyValueID = null;
                  if (searchPropertyValueIDArray != null)
                  {
                      foreach (int searchPropertyValueID in searchPropertyValueIDArray)
                      {
                          Sports_Category_SearchProperty_Value sports_Category_SearchProperty_ValueEntity = CategoryCache.SelectCategorySearchPropertyValueByID(searchPropertyValueID);
                          int searchPropertyID = sports_Category_SearchProperty_ValueEntity.SearchPropertyID;

                          Sports_Category_SearchProperty sports_Category_SearchPropertyEntity = CategoryCache.SelectCategorySearchProperty(searchPropertyID);
                          if (sports_Category_SearchPropertyEntity.PropertyName == curPropertyName)
                          {
                              urlPropertyValueID = searchPropertyValueID;

                              isHasCurrentPropertyName = true;
                              break;
                          }
                      }
                  }

                  string searchPropertyIDUrl = "";
                  if (searchPropertyValueIDArray != null)
                  {
                      foreach (int searchPropertyValueID in searchPropertyValueIDArray)
                      {
                          if (searchPropertyValueID != urlPropertyValueID)
                          {
                              searchPropertyIDUrl += "-" + searchPropertyValueID.ToString();
                          }
                      }
                  }

                  //具體屬性
                  Literal litPropertyValue = (Literal)e.Item.FindControl("litPropertyValue");
                  if (isHasCurrentPropertyName)
                  {
                      if (urlPropertyValueID != null && urlPropertyValueID.ToString() == curPropertyValueID)
                      {
                          litPropertyValue.Text = "<a href=\"http://sports./product/" + cNo + searchPropertyIDUrl + "-" + curPropertyValueID + ".htm\" class=\"curSearchProperty\" isCurrent=\"true\">" + curPropertyValue + "</a>";
                      }
                      else
                      {
                          litPropertyValue.Text = "<a href=\"http://sports./product/" + cNo + searchPropertyIDUrl + "-" + curPropertyValueID + ".htm\" class=\"normal\">" + curPropertyValue + "</a>";
                      }
                  }
                  else
                  {
                      litPropertyValue.Text = "<a href=\"http://sports./product/" + cNo + searchPropertyIDUrl + "-" + curPropertyValueID + ".htm\" class=\"normal\">" + curPropertyValue + "</a>";
                  }
              }
          }

             

       

          如此,我們就正式完成了這一個(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)系。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多