2013-08-23 50 views
1

我想對cart.liquid文件中的cart.items數組進行排序。然後我可以按照預期的順序在表格中顯示時間。Shopify使用Liquid腳本排序cart.items數組

{% for item in cart.items sort_by:item.line_price %} 
    <div class="row"> 
     <div class="span12"> 
     <h1>Your cart</h1> 
     <form action="/cart" method="post" id="cartform"> 
     <table> 
     </table> 
     </form> 
     </div> 
    </div> 
    {% endfor %} 

但代碼不能正常工作,因爲我不能在for語句中使用sort_by:item.line_price

如何使用內置功能對陣列進行排序?

另一個問題是Shopify液體不支持創建數組。如果我使用自己的算法對數組進行排序。但是我怎樣才能將輸出保存到一個新的數組?

非常感謝。

回答

2

您可以將您的數據呈現給Javascript數據結構,然後對其進行排序。在Javascript中使用模板。 Handlebars.js適用於此。沒有內置的排序。

+0

好主意,我想過之前,它會爲cart.liquid頁面工作。但它不適用於「新訂單通知」,因爲電子郵件模板不支持JavaScript。 –

6

Shopify有一個sort filter「散列或滴數組」。你可以這樣使用它:

{% assign cart_items = cart.items | sort: "line_price" %} 
{% for item in cart_items %} 
- {{item.title}} {{item.line_price}}<br/> 
{% endfor %} 
+0

我可以使用像「item.properties ['tags']包含'[Hardware]'」的自定義字段嗎? –

+1

不,我不這麼認爲,從閱讀[code](https://github.com/Shopify/liquid/blob/c8f38ad9d0afda4d70da24f1e25cc7f577cf4e22/lib/liquid/standardfilters.rb#L83),這可能**是Shopify也在內部使用,似乎不支持此語法。 – hjblok

+0

另外項目(line_items)沒有字段「屬性」。產品標籤只能從產品中獲得('item.product.tags')。 – hjblok