Как я могу отсортировать размерный массив выходных данных по значению ключа из файлов yaml данных jekyll? - PullRequest
0 голосов
/ 12 июня 2019

Мне нужно имя из нескольких 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>

Я прочитал несколько примеров с этой проблемой сортировки.Просто не уверен, что какой-либо из результатов хеширования в цикле ответил на мою ситуацию?

1 Ответ

1 голос
/ 14 июня 2019

Вы не применяете сортировку к допустимому массиву хэшей.

Если вы наберете {{ 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 используется только для отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...