2017-08-15 49 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