①個人對商城類商品篩選功能的實現比較好奇;
②對商城中關於商品的數據表設計比較感興趣。(該功能涉及到與數據庫的交互,而且與數據庫中數據表的設計好壞有一定的聯系);
③多條件(屬性)篩選功能在現今的很多網站都需要用到,很廣泛(如:一般商城網、團購網、房產網、信息分類網站等等)。
①能夠對多條件篩選功能有一個初步的認識。(起碼自己做,也能夠快速實現吧);
②對多條件篩選的實現中,數據庫該如何去設計才會更優化和更合理些(參考前人的經驗);
③對多條件篩選中的一些策略或者是技巧,能有一個了解(會總結幾點)
①京東商城的商品篩選功能(截圖):
②蘇寧商城的商品篩選功能(截圖)
③國美在線的商品篩選功能(截圖)
補充:其實,要對該功能的觀察,還必須對地址欄,也作一番思考的,我這裡就省略了,畢竟如果這樣分析,會更簡單一些。上面這些例子,只作一個引子吧。後續我會完善它的。
④ECSHOP的商品篩選功能實現,展示細節(截圖+文字)如下:
1)首先,我本地服務器,給本機安裝的ecshop演示網站,配了一個虛擬主機地址:為
“GSM手機”分類下的商品。如下:
如果我想查看品牌為“諾基亞”的手機,那麼點擊“諾基亞”標簽即可:
訪問地址為:
結果頁面為:
訪問地址為:
結果頁面為:
分析:從上面的地址欄的變化和截圖的變化,可以初步看出ecshop的多條件搜索方法是怎麼樣的了。
猜想1:隨著用戶每一次點擊條件(屬性)進行商品篩選時,搜索地址欄會變化,為什麼地址欄會變化,歸根結底,一定是每一個商品的屬性的a標簽的超鏈接地址被改變了。而且是每點擊一次,都會隨著搜索條件的不同,而改變。
從而我們知道,這個屬性的超鏈接,是動態生成的。ecshop後台一定是作了大量的判斷過程,並最終為每一個商品屬性,生成一個超鏈接地址,以防止上一次的搜索條件丟失。
猜想2:商品的價格區間,是根據什麼來計算的呢?還是人工後台設置的,京東的商品價格區間,好像都是很有規律的,和ecshop的價格區間,有比較大的區別。別管這麼多了,我們還是先研究ecshop的再說。
猜想3:參數 filter_attr=163.0.160.0 中的幾個數字,一定代表著下面:顏色、屏幕大小 、手機制式、外觀樣式屬性下,都選擇了哪一些值了。
----> 帶著這樣一些疑問,那我們直接去研究一下ecshop是如何實現上面的多條件搜索功能啦。。。GO。。。
首先,我們到ecshop的網站更目錄,找到category.php文件,打開它進行研究一下。
查看category.php全部代碼
1)第一步,首先,文件一開頭,一定是接收前台頁面發送過來的各種POST和GET參數了,這裡主要還是指地址欄GET方式傳過來的參數了。
= (['page']) && (['page']) > 0 ? (['page']) : 1 = (['page_size']) && (['page_size']) > 0 ? (['page_size']) : 10 = (['brand']) && (['brand']) > 0 ? (['brand']) : 0 = (['price_max']) && (['price_max']) > 0 ? (['price_max']) : 0 = (['price_min']) && (['price_min']) > 0 ? (['price_min']) : 0 = (['filter_attr']) ? ((['filter_attr'])) : '0' = ( = () ? '' : ('.', ( = ['show_order_type'] == '0' ? 'list' : (['show_order_type'] == '1' ? 'grid' : 'text' = ['sort_order_method'] == '0' ? 'DESC' : 'ASC' = ['sort_order_type'] == '0' ? 'goods_id' : (['sort_order_type'] == '1' ? 'shop_price' : 'last_update' = ((['sort']) && (((['sort'])), ('goods_id', 'shop_price', 'last_update'))) ? (['sort']) : = ((['order']) && (((['order'])), ('ASC', 'DESC'))) ? (['order']) : = ((['display']) && (((['display'])), ('list', 'grid', 'text'))) ? (['display']) : ((['ECS']['display']) ? ['ECS']['display'] : = (, ('list', 'grid', 'text')) ? : 'text' ('ECS[display]', , gmtime() + 86400 * 7);
View Code
View Code
View Code
View Code
不過,我也學到了一些東西,具體如下:
① 對Ecshop商品主要數據表的設計有了了解。(下一篇會簡單介紹)
② 原來這裡的要對商品的那些屬性進行篩選,並不是程序自動處理,而是管理員後台指定的。
③ 價格區間的計算,是按照一定的算法計算出來的,比較智能,但數字不太好看(另外一種策略,是自己後台為每一個商品分類,都指定一個價格區間,也是可以的。)
④ 品牌、價格區間和屬性,都是按照一定的原則從數據庫抽取出來的。即,這些說有的分類或者屬性下,必須是有商品的,才會把它獲取出來。比如,如果顏色為黑色的屬性下面是沒有任何商品的,那麼黑色這個屬性,就不應該顯示出來。其他依次類推。
⑤ 對於一些較為復雜的mysql語句查詢,有了一些了解(希望不斷提高啦。。)
以上,是小弟做的一些小小的分析和總結,我經驗還不豐富啊,有哪一些不對的地方和不足,希望大家指正,我會虛心學習和接受,謝謝啦!!