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