gpt4 book ai didi

ruby - 你如何在 Jekyll 中按帖子计数对 site.tags 进行排序?

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:49 24 4
gpt4 key购买 nike

抱歉,我是 Ruby 的新手,但我正在尝试向我的模板添加一个 liquid 标签,我可以循环显示五个最流行标签的列表。

出于某种原因,这个插件在我使用时只输出一个标签。

这是我在 mu 插件中的内容:

module Jekyll
class PopularTags < Liquid::Tag

def initialize(tag_name, text, tokens)
super
end

def render(context)
tags = context.registers[:site].tags
return tags.sort_by { |tag, posts| posts.count }
end
end
end
Liquid::Template.register_tag('popular_tags', Jekyll::PopularTags)

这是我在模板中输入的内容:

{% popular_tags %}

最佳答案

也可以在没有插件的情况下执行此操作,这意味着它可以在 GitHub Pages 上运行.

我已经在 my blog 上做类似的事情(也没有插件) ,我在这里显示了一个标签列表,其中包含帖子数,按字母顺序排序。 The source code is here .

修改它使其按帖子数排序并不费力:

{% capture tags %}
{% for tag in site.tags %}
{{ tag[1].size | plus: 1000 }}#{{ tag[0] }}#{{ tag[1].size }}
{% endfor %}
{% endcapture %}
{% assign sortedtags = tags | split:' ' | sort %}
{% for tag in sortedtags reversed %}
{% assign tagitems = tag | split: '#' %}
<li><a href="/tags/#{{ tagitems[1] }}">{{ tagitems[1] }} ({{ tagitems[2] }})</a></li>
{% endfor %}

我想有一些必要的解释:

tag[0] 是标签的名称。
tag[1] 是包含标签帖子的数组,因此 tag[1].size 是帖子数。

  1. 基本上,我们需要捕获类似 tag[1].size#tag[0] 的内容,这将导致这样的字符串:

    3#TagWithThreePosts 1#TagWithOnePost 2#TagWithTwoPosts
  2. 然后,在 {% assign sortedtags = ... 行中,我们再次拆分它并对其进行排序,因此结果是一个排序的字符串数组:

    • 1#TagWithOnePost
    • 2#TagWithTwoPosts
    • 3#TagWithThreePosts
  3. 在最后一个循环中,我们以倒序(=降序)循环,按 # 分割以获取标签名称和帖子数,并显示链接。

唯一的问题是包含 10 个或更多帖子的标签。
由于我们正在对字符串进行排序,因此第 2 步的结果将如下所示:

  • 1#TagWithOnePost
  • 10#TagWithTenPosts错误的顺序,因为它是一个字符串!
  • 2#TagWithTwoPosts
  • 3#TagWithThreePosts

为了解决这个问题,我将 1000 添加到帖子计数中以进行排序。所以 1#...10#... 变成了 1001#...1010#...,它们的顺序正确。

我仍然想显示实际的帖子编号(没有添加 1000),所以我将它附加为 {% capture tags %} 中的第三项部分:

{{ tag[1].size | plus: 1000 }}#{{ tag[0] }}#{{ tag[1].size }}

顺便说一下,我正在链接到一个标签页(/tags/#blah,例如,所有标签在一个页面上的所有帖子),我也以类似的方式实现了它, described here .

关于ruby - 你如何在 Jekyll 中按帖子计数对 site.tags 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com