2017-08-15 44 views
0

如何以特定順序輸出數據文件中的項目?Jekyll數據手冊輸出訂單


比方說,我的數據文件看起來像這樣:

[{ 
    "name": "Tim" 
}, { 
    "name": "Paul" 
}, { 
    "name": "Brian" 
}, { 
    "name": "James" 
}, { 
    "name": "Mark" 
}] 

沒有真正讓足夠多因子評分進去,我寫了下面:

{% for item in site.data.example %} 

    {% if 
    item.name == "Mark" or 
    item.name == "Brian" or 
    item.name == "James" 
    %} 
    <div> 
    {{ item.name }} 
    </div> 
    {% endif %} 

{% endfor %} 

...這顯然會輸出:

<div>Brian</div> 
<div>James</div> 
<div>Mark</div> 

。 ..when我想要的順序爲:

<div>Mark</div> 
<div>Brian</div> 
<div>James</div> 

我不能想出一個辦法強迫一個特定的順序,不是改變在數據文件中的順序等,但是,這並不是一個可行的選擇我。

+0

P.S.一般來說,我沒有太多處理數據文件的經驗。 – Joonas

+0

這是一個json數據文件嗎? – marcanuy

+0

@marcanuy,是的。 – Joonas

回答

1

按照需要的順序創建一個索引,它可以在另一個數據文件中或直接作爲Liquid數組。

然後爲索引中的每個項目,遍歷所述數據文件的處理艇員選拔該配襯它的一個:

{% assign listorder = "Mark,Brian,James" |split: ","%} 
{% for order in listorder %} 
{% for data in site.data.mydata %} 
{% if data['name']==order%} 
{{data['name']}}, 
{% endif %} 
{% endfor%} 

{% endfor %} 

輸出:

Mark, Brian, James, 

要具有在數據文件中的順序

創建_data/order.yml

- Mark 
- Brian 
- James 

然後在代碼中使用:{% for order in site.data.order %}

+0

謝謝。你不介意我問...有沒有辦法把它變成一個自定義的函數(或其他東西),以便我可以在不同頁面的多個位置使用它。像:'getInfo(「Mark,Brian,James」)''和'getInfo(「Brian,Paul,Tim」)''。我並不是堅持使用這種確切的格式,只需要研究一種以有意義的方式重複此代碼的方法。 – Joonas

+0

最好的選擇是用訂單創建多個數據文件,我已經用它更新了問題。 – marcanuy

+0

不幸的是,這不是一個選項,因爲我們正在討論一個50MB的json文件,它不能手動編輯,我挑出的每批數據都需要以任意順序排列。 – Joonas