程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 【PHP開源產品】Ecshop的商品篩選功能實現分析之一(主要對category.php進行分析)

【PHP開源產品】Ecshop的商品篩選功能實現分析之一(主要對category.php進行分析)

編輯:關於PHP編程

一、首先,說明一下為什麼要對category.php文件進行分析。

(1)原因如下:

①個人對商城類商品篩選功能的實現比較好奇;

②對商城中關於商品的數據表設計比較感興趣。(該功能涉及到與數據庫的交互,而且與數據庫中數據表的設計好壞有一定的聯系);

③多條件(屬性)篩選功能在現今的很多網站都需要用到,很廣泛(如:一般商城網、團購網、房產網、信息分類網站等等)。

(2)希望達到的目的是:

①能夠對多條件篩選功能有一個初步的認識。(起碼自己做,也能夠快速實現吧);

②對多條件篩選的實現中,數據庫該如何去設計才會更優化和更合理些(參考前人的經驗);

③對多條件篩選中的一些策略或者是技巧,能有一個了解(會總結幾點)

 

二、然後,我們首先看一下現在需求是如何的?(多條件篩選,請參考京東、蘇寧、國美等)

①京東商城的商品篩選功能(截圖):

 

②蘇寧商城的商品篩選功能(截圖)

 

③國美在線的商品篩選功能(截圖)

 

補充:其實,要對該功能的觀察,還必須對地址欄,也作一番思考的,我這裡就省略了,畢竟如果這樣分析,會更簡單一些。上面這些例子,只作一個引子吧。後續我會完善它的。

 

④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語句查詢,有了一些了解(希望不斷提高啦。。)

 

以上,是小弟做的一些小小的分析和總結,我經驗還不豐富啊,有哪一些不對的地方和不足,希望大家指正,我會虛心學習和接受,謝謝啦!!

 

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved