閱讀547 返回首頁    go 阿裏雲 go 技術社區[雲棲]


magento -- 按某個屬性排序上的一個嚐試

Magento的屬性可以用來放在產品列表頁給產品進行排序,要用來排序的屬性隻需要在後台屬性管理的地方選擇應用於排序,默認情況下是name和price這兩個屬性可以在前台用來排序(Position是例外)。

那麼現在有個簡單的嚐試,就是新增一個屬性,隻允許填寫數字,然後前台的產品可以按照數字的大小來對產品進行排序。看起來很合理的需求,嚐試起來卻遇到了麻煩。

首先要決定這個屬性的輸入類型,magento允許的輸入類型如下圖所示,看上去既能手動輸入又能限製輸數字的就隻能是文本框了。

所以先嚐試了用文本框輸入類型,然後限製隻能輸入整數,如下圖

    

新增這個屬性後,選擇將這個屬性應用於列表頁的排序,然後給幾個產品的這個屬性分別賦不同的值(數字),現在前台就可以嚐試用這個屬性來排序了。

      

問題來了,當我按序號降序排列時,序號為96的產品確實排在序號為97的產品的後麵,但卻同時發現原本應該排在最前麵的序號為198的產品卻排在了後麵,甚至序號為20的產品都在它的前麵,這是怎麼回事?

檢查數據庫後發現,凡是文本框類型的屬性,在數據庫中保存的都是varchar類型的數據,限製輸入整數也隻是在填寫該屬性時多了一層整數的驗證,也就是說前台用這個屬性進行排序時,實際上是一些字符串進行對比之後在排序,字符串排序會優先檢查首字母,這也就是為什麼降序時序號為20的產品會排在序號為198的產品的前麵。

那麼Magento就沒有辦法用某個屬性的數值大小來對產品進行排序了嗎?也不盡然,檢查數據庫的時候會發現價格屬性在數據庫裏是按數字類型保存的(這個好像是理所當然的),前台自帶的按價格排序也驗證了價格類型的屬性排序是確實是按數字的大小來排的,而不是比較字符串。

所以現在嚐試新增一個屬性,輸入類型選擇價格型,應用於前台排序,用來管理商品時填寫某種需要用到的數字(雖然是價格型屬性,但不是拿來填價格的)。同預料的一樣,這樣前台按這個新屬性排序是就是完全按數字的大小來排了。

不知道以這種方式來實現需求是不是最合理的方式,對Magento來說,至少我自己先這麼用著了。

 

最後更新:2017-04-02 06:51:35

  上一篇:go DirectSound示例的配置
  下一篇:go 快速排序