如何在Jekyll中按标签对帖子进行排序?

时间:2014-10-12 06:52:11

标签: jekyll jekyll-extensions

我不熟悉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 &ldquo;'
      tag_title_suffix = site.config['tag_title_suffix'] || '&rdquo;'
      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.我一直在靠墙撞墙一段时间,不能因为该死的我弄明白我做得不对。

4 个答案:

答案 0 :(得分:3)

如果包含所有标记(例如this one on my blog的所有帖子的单个标记页面已经足够,您可以just generate it with Jekyll/Liquid,而不使用任何插件。< / p>

如果您绝对想要为每个标签分别设置一个页面,那么您只有两个选择:

  1. David Jacquel's answer (在本地计算机上生成包含插件的页面,并仅将生成的HTML推送到GitHub)

  2. 每次您撰写首次使用新标记的帖子时,manually create a new page with the tag name where you load all posts for that tag

  3. 这两个选项比我的博客中的标签页面(参见第一个链接)要多一些,但是如果你想在GitHub页面上每个标签有一个页面,别无选择

答案 1 :(得分:1)

Only some plugins are supported by github pages。您的标记页面当前未生成。

如果您想使用标记插件,则必须

  • 在本地生成您的网站
  • 添加一个空的 .nojekyll 文件
  • 将生成的文件推送到分支
  • 您还可以将代码推送到其他分支,例如代码

答案 2 :(得分:0)

如果您无法解决按{strong>标签排序posts的麻烦,您可以考虑 collections

Jekyll中的

集合是一组项目,这些项目在各个项目之间具有一定的关系,但可能没有按时间顺序排列。

例如,我们假设您有一个关于电影评论的博客。您将评论写为帖子。所以对于每部电影都要创建一个帖子。假设您要列出前25名必须观看的电影或前10名恐怖电影,其中包含每部电影的所有详细信息。

  

在这种情况下,postspages不是一个好的选择。请改用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 %}