Jekyll 不区分大小写的排序
Jekyll case-insensitive sorting
我正在尝试在 Jekyll 中创建标签列表。一些标签是 "accessibility"、"CSS" 和 "JavaScript"。所以我创建列表的 Jekyll 代码如下所示:
<ul>
{% for item in (0..site.tags.size) %}{% unless forloop.last %}
{% capture this_word %}{{ tag_words[item] }}{% endcapture %}
<li>
<a href="#{{ this_word | cgi_escape }}" class="tag">{{ this_word }}
<span>({{ site.tags[this_word].size }})</span>
</a>
</li>
{% endunless %}{% endfor %}
</ul>
但是,列表不是按字母顺序排列的。首先区分大小写,大写字母在前;所以我上面的示例标签按以下顺序呈现:
- CSS
- JavaScript
- 辅助功能
有没有办法让排序列表不区分大小写?
液体中有一个 sort_natural
过滤器,但它 doesn't work with site.tags
。
诀窍是生成一个包含所有标签名称的数组
{% comment %} Creates an empty array {% endcomment %}
{% assign tags = "" | split:"" %}
{% comment %}Creates an array of tags names{% endcomment %}
{% for t in site.tags %}
{% assign tags = tags | push: t[0] %}
{% endfor %}
自然排序(不区分大小写)
{% assign sorted_tags = tags | sort_natural %}
基于此排序,打印标签计数
<ul>
{% for t in sorted_tags %}
<li>{{ t }} : {{ site.tags[t].size }}</li>
{% endfor %}
</ul>
一旦您必须通过名称找到 post,这就会变得更加复杂。这是按字母顺序对归档列表中的 post 进行排序的解决方案:
{% assign post_names = "" | split:"" %}
{% for post in tag.last %}
{% assign post_names = post_names | push: post.title %}
{% endfor %}
{% assign sorted_post_names = post_names | sort_natural %}
{% for post_name in sorted_post_names %}
{% assign matched_post = site.posts | where:"title",post_name %}
{% assign post = matched_post[0] %}
…
{% endfor %}
诀窍是从 post 的总列表中找到带有 where
的 post。
似乎提到的 已经修复。您可以尝试直接使用它:
<ul>
{% for t in site.tags sort_natural %}
<li>{{ t }} : {{ site.tags[t].size }}</li>
{% endfor %}
</ul>
我正在尝试在 Jekyll 中创建标签列表。一些标签是 "accessibility"、"CSS" 和 "JavaScript"。所以我创建列表的 Jekyll 代码如下所示:
<ul>
{% for item in (0..site.tags.size) %}{% unless forloop.last %}
{% capture this_word %}{{ tag_words[item] }}{% endcapture %}
<li>
<a href="#{{ this_word | cgi_escape }}" class="tag">{{ this_word }}
<span>({{ site.tags[this_word].size }})</span>
</a>
</li>
{% endunless %}{% endfor %}
</ul>
但是,列表不是按字母顺序排列的。首先区分大小写,大写字母在前;所以我上面的示例标签按以下顺序呈现:
- CSS
- JavaScript
- 辅助功能
有没有办法让排序列表不区分大小写?
液体中有一个 sort_natural
过滤器,但它 doesn't work with site.tags
。
诀窍是生成一个包含所有标签名称的数组
{% comment %} Creates an empty array {% endcomment %}
{% assign tags = "" | split:"" %}
{% comment %}Creates an array of tags names{% endcomment %}
{% for t in site.tags %}
{% assign tags = tags | push: t[0] %}
{% endfor %}
自然排序(不区分大小写)
{% assign sorted_tags = tags | sort_natural %}
基于此排序,打印标签计数
<ul>
{% for t in sorted_tags %}
<li>{{ t }} : {{ site.tags[t].size }}</li>
{% endfor %}
</ul>
一旦您必须通过名称找到 post,这就会变得更加复杂。这是按字母顺序对归档列表中的 post 进行排序的解决方案:
{% assign post_names = "" | split:"" %}
{% for post in tag.last %}
{% assign post_names = post_names | push: post.title %}
{% endfor %}
{% assign sorted_post_names = post_names | sort_natural %}
{% for post_name in sorted_post_names %}
{% assign matched_post = site.posts | where:"title",post_name %}
{% assign post = matched_post[0] %}
…
{% endfor %}
诀窍是从 post 的总列表中找到带有 where
的 post。
似乎提到的
<ul>
{% for t in site.tags sort_natural %}
<li>{{ t }} : {{ site.tags[t].size }}</li>
{% endfor %}
</ul>