1

我需要在输出中按字母顺序排序的几个yml文件中的名称。

我试图| sort: 'name'在我的 for 循环中添加。我得到:

 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>

我已经阅读了几个有关此类问题的示例。只是不确定循环中的任何哈希结果是否回答了我的情况?

4

1 回答 1

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过滤器仅用于调试。

于 2019-06-14T11:28:52.103 回答