我需要从输出中按字母顺序对几个yml
文件进行排序的名称。
我尝试在我的for循环中添加| sort: 'name'
。我得到:
Liquid Exception: no implicit conversion of String into Integer in pages/index.html
_data/cat/example1.yml
name: "test1"
permalink: "/test"
twitter: "WIP"
facebook: "WIP"
web: "WIP"
我的测试中,/cat
文件夹中至少有3个yml文件。
<div class="row">
{% for cat_hash in site.data.cat %}
{% assign cat = cat_hash[1] | sort: 'name' %}
<div class="col-6 col-12-narrower">
<section>
<header>
<a class="image featured" href="{{ cat.permalink }}" title="{{ cat.name }}"><h3>{{ cat.name }}</h3></a>
</header>
<p>{{ cat.web }}</p>
</section>
</div>
{% endfor %}
</div>
我已经阅读了有关此类问题的几个示例。只是不确定循环中是否有任何哈希结果能回答我的情况?
答案 0 :(得分:1)
您未将排序应用于有效的哈希数组。
如果您执行{{ site.data.cat | inspect }}
,则会得到类似{"t1"=>{"name"=>"test1"}, "t2"=>{"name"=>"allo"}, "t3"=>{"name"=>"jekyll"}}
的信息(为简便起见,我简化了数据文件,但对于像您这样的更复杂的数据文件也是如此)。
您当前正在对无法对其自身进行排序的{"name"=>"test1"}
对象应用排序过滤器。
您需要做的是将所有数据哈希存储在单个数组中。然后您可以对其进行排序。
{% assign datas = "" | split: "" %}
{% for cat in site.data.cat %}
{% assign datas = datas | push: cat[1] %}
{% endfor %}
DEBUG : {{ datas | inspect }}
您现在有了一个可以排序的数组。
{% assign datas = datas | sort: "name" %}
DEBUG : {{ datas | inspect }}
您现在可以按名称打印数据了。
完整代码:
{% assign datas = "" | split: "" %}
{% for cat in site.data.cat %}
{% assign datas = datas | push: cat[1] %}
{% endfor %}
{% assign datas = datas | sort: "name" %}
<div class="row">
{% for cat in datas %}
<div class="col-6 col-12-narrower">
<section>
<header>
<a class="image featured" href="{{ cat.permalink }}" title="{{ cat.name }}">
<h3>{{ cat.name }}</h3>
</a>
</header>
<p>{{ cat.web }}</p>
</section>
</div>
{% endfor %}
</div>
请注意,inspect
过滤器仅用于调试。