Liquid 如何根据jekyll数据yaml文件中的键值对维度数组输出进行排序?

Liquid 如何根据jekyll数据yaml文件中的键值对维度数组输出进行排序?,liquid,jekyll-theme,Liquid,Jekyll Theme,我需要几个yml文件的名称,按字母顺序排列在输出上 我尝试在for循环中添加| sort:'name'。我得到: Liquid Exception: no implicit conversion of String into Integer in pages/index.html 示例\u数据/cat/example1.yml 在/cat文件夹中,我的测试中至少有3个yml文件 示例包含文件 {site.data.cat%} {%assign cat=cat_散列[1]|排序:'名称'%}

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

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

 Liquid Exception: no implicit conversion of String into Integer in pages/index.html
示例
\u数据/cat/example1.yml
/cat
文件夹中,我的测试中至少有3个yml文件

示例包含文件

{site.data.cat%}
{%assign cat=cat_散列[1]|排序:'名称'%}
{{cat.web}

{%endfor%}

我已经读过几个关于这类问题的例子。只是不确定循环中的任何哈希结果是否符合我的情况?

您没有对有效的哈希数组应用排序

如果你做一个
{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>
{%assign data=”“| split:%}
{site.data.cat%中的cat为%1}
{%assign datas=datas | push:cat[1]}
{%endfor%}
{%assign datas=datas |排序:“名称”%}
{%用于数据%中的cat}
{{cat.web}

{%endfor%}

请注意,
inspect
filter仅用于调试。

我尝试了{%assign datas=“”| split:“%}{%for cat in site.data.cat%}{%assign datas=datas | push:cat[1]}{%assign datas=datas | sort:“%%}{name}{{{datas | inspect}}{cat.web}

{%endfor%}编辑了我的答案所以完整的答案是{%assign datas=“”| split:“%}{%cat in site.data.cat%}{%assign datas=datas | push:cat[1]}{%endfor%}{%assign datas=datas | sort:“%name”}{%cat in datas%}{cat.web}

{%endfor%}
{% 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>