抱歉,我是 Ruby 新手,但我正在尝试向我的模板添加一个液体标签,我可以循环显示五个最流行标签的列表。
由于某种原因,当我使用这个插件时,它只输出一个标签。
这是我在 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 页面.
我已经在做类似的事情了(也无需插件) on my blog,我在其中显示带有帖子计数的标签列表,按字母顺序排序。源代码在这里.
修改它并使其按帖子数排序并不需要太多努力:
{% 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
是帖子数。
-
基本上,我们需要捕获类似的东西tag[1].size#tag[0]
,这会产生这样的字符串:
3#TagWithThreePosts 1#TagWithOnePost 2#TagWithTwoPosts
-
然后,在{% assign sortedtags = ...
行,我们再次拆分它并对其进行排序,因此结果是一个排序的字符串数组:
1#TagWithOnePost
2#TagWithTwoPosts
3#TagWithThreePosts
在最后一个循环中,我们以相反(=降序)顺序循环它,分割为#
获取标签名称和帖子数,并显示链接。
唯一的问题是包含 10 个及以上帖子的标签。
由于我们要对字符串进行排序,因此第 2 步的结果将如下所示:
1#TagWithOnePost
-
10#TagWithTenPosts
← 顺序错误,因为它是一个字符串!
2#TagWithTwoPosts
3#TagWithThreePosts
为了解决这个问题,我将帖子计数添加 1000 以进行排序。所以1#...
and 10#...
become 1001#...
and 1010#...
,并且它们的顺序正确。
我仍然想显示实际的帖子编号(未加1000),所以我将其作为第三项添加到{% capture tags %}
part:
{{ tag[1].size | plus: 1000 }}#{{ tag[0] }}#{{ tag[1].size }}
顺便说一句,我链接到一个标签页(/tags/#blah
,例如单个页面上所有标签的所有帖子)我也以类似的方式实现,此处描述.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)