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

dav*_*rey 1 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
Run Code Online (Sandbox Code Playgroud)

和 _config.yml 我添加了

tag_dir: /tag
Run Code Online (Sandbox Code Playgroud)

我用这个包含文件显示标签列表:

<div class="tags modal">
    <ul>
        {% for tag in site.tags %}
        <li>
            <a href="/tag/{{ tag | first | slugize }}/">
                {{ tag | first }}
            </a>
        </li>
        {% endfor %}
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

当我尝试选择一个标签时,url 会相应地更改,但没有其他任何更改。它不显示我的 tag_index 模板或过滤标签。

可以预览该站点,并在此处提供完整的源代码。 我已经用头撞墙有一段时间了,该死的我无法弄清楚我做错了什么。

Chr*_*cht 5

如果一个包含所有标签的所有帖子的单个标签页面(就像我博客上的这个对你来说就足够了,你可以只用 Jekyll/Liquid 生成它,根本不使用任何插件。

如果您绝对希望每个标签都有一个单独的页面,那么您只有两种选择:

  1. David Jacquel 的回答 (在本地机器上用插件生成页面,只将生成的 HTML 推送到 GitHub)

  2. 每次您在第一次使用新标签的情况下撰写帖子时,请手动创建一个带有标签名称的新页面 ,您可以在其中加载该标签的所有帖子

这两种选择都比我博客中的标签页(请参阅第一个链接)要多一些工作,但是当您希望 GitHub Pages 上的每个标签一页时,别无他法。