我不熟悉Ruby,我知道有一个共同的Jekyll插件可以做到这一点,但我整天都在努力,但却无法让它发挥作用。
我添加了这个插件:
module Jekyll
class TagIndex < Page
def initialize(site, base, dir, tag)
@site = site
@base = base
@dir = dir
@name = 'index.html'
self.process(@name)
self.read_yaml(File.join(base, '_layouts'), 'tag_index.html')
self.data['tag'] = tag
tag_title_prefix = site.config['tag_title_prefix'] || 'Posts Tagged “'
tag_title_suffix = site.config['tag_title_suffix'] || '”'
self.data['title'] = "#{tag_title_prefix}#{tag}#{tag_title_suffix}"
end
end
class TagGenerator < Generator
safe true
def generate(site)
if site.layouts.key? 'tag_index'
dir = site.config['tag_dir'] || 'tag/tag'
site.tags.keys.each do |tag|
write_tag_index(site, File.join(dir, tag), tag)
end
end
end
def write_tag_index(site, dir, tag)
index = TagIndex.new(site, site.source, dir, tag)
index.render(site.layouts, site.site_payload)
index.write(site.dest)
site.pages << index
end
end
end
和_config.yml我添加了
tag_dir: /tag
我用这个包含文件显示标签列表:
<div class="tags modal">
<ul>
{% for tag in site.tags %}
<li>
<a href="/tag/{{ tag | first | slugize }}/">
{{ tag | first }}
</a>
</li>
{% endfor %}
</ul>
</div>
当我尝试选择标记时,网址会相应更改但其他内容不会发生变化。它不显示我的tag_index模板或过滤标签。
The site can be previewed and full source is available here.我一直在靠墙撞墙一段时间,不能因为该死的我弄明白我做得不对。
答案 0 :(得分:3)
如果包含所有标记(例如this one on my blog)的所有帖子的单个标记页面已经足够,您可以just generate it with Jekyll/Liquid,而不使用任何插件。< / p>
如果您绝对想要为每个标签分别设置一个页面,那么您只有两个选择:
David Jacquel's answer (在本地计算机上生成包含插件的页面,并仅将生成的HTML推送到GitHub)
每次您撰写首次使用新标记的帖子时,manually create a new page with the tag name where you load all posts for that tag
这两个选项比我的博客中的标签页面(参见第一个链接)要多一些,但是如果你想在GitHub页面上每个标签有一个页面,别无选择
答案 1 :(得分:1)
Only some plugins are supported by github pages。您的标记页面当前未生成。
如果您想使用标记插件,则必须
答案 2 :(得分:0)
如果您无法解决按{strong>标签排序posts
的麻烦,您可以考虑
collections
集合是一组项目,这些项目在各个项目之间具有一定的关系,但可能没有按时间顺序排列。
例如,我们假设您有一个关于电影评论的博客。您将评论写为帖子。所以对于每部电影都要创建一个帖子。假设您要列出前25名必须观看的电影或前10名恐怖电影,其中包含每部电影的所有详细信息。
在这种情况下,
posts
或pages
不是一个好的选择。请改用collections
。
您可以拥有任意数量的馆藏。它是某种东西的集合。水果,蔬菜,饮料等的集合。不要为子集创建集合,例如异国情调的水果。他们收集水果。在这种情况下,请使用类别。
答案 3 :(得分:0)
自发布以来,情况可能有所变化,但Jekyll内置了通过标签(或类别)进行排序的功能。您可以使用the docs on Jekyll's website中建议的方法来做到这一点。
从网站上
Jekyll通过
site.categories
向我们提供了类别。遍历页面上的site.categories
会为我们提供另一个包含两个项目的数组,第一个项目是类别的名称,第二个项目是该类别中的帖子的阵列... 对于标签,它恰好是除了变量是site.tags
之外,其他均相同。
{% for tag in site.tags %}
<h3>{{ tag[0] }}</h3>
<ul>
{% for post in tag[1] %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{% endfor %}
That️将为您提供Jekyll网站的每个标签及其相关帖子。您可以走得更远,只返回特定的标签。例如,仅列出标签nsfw
及其相关帖子。
{% for tag in site.tags %}
{%- if tag[0] == "nsfw" -%}
<h3>{{ tag[0] }}</h3>
<ul>
{% for post in tag[1] %}
<li><a href="{{ post.url }}">{{ post.title }}</a></li>
{% endfor %}
</ul>
{%- endif -%}
{% endfor %}