1

我对 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>

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

该网站可以预览,完整的源代码可在此处获得。 我已经把头撞在墙上一段时间了,我该死的无法弄清楚我做错了什么。

4

4 回答 4

5

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

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

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

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

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

于 2014-10-12T12:12:59.207 回答
2

github pages 只支持一些插件。当前未生成您的标签页。

如果你想使用你的标签插件,你必须

  • 在本地生成您的站点
  • 添加一个空的.nojekyll文件
  • 将生成的文件推送到您的分支中
  • 您还可以将代码推送到其他分支中,例如代码
于 2014-10-12T11:05:46.250 回答
1

如果你不能解决posts标签排序的麻烦,你可以考虑 收藏

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

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

在这种情况下,posts还是pages不是一个好的选择。改为使用collections

您可以拥有任意数量的集合。它是某种事物的集合。水果集合、蔬菜集合、饮料集合等。不要为子集创建集合,例如异国水果。它们属于水果系列。在这种情况下使用类别

于 2018-05-20T08:27:13.673 回答
0

也许自从这篇文章发布以来事情已经发生了变化,但是 Jekyll 内置了通过标签(或类别)进行排序。您可以使用Jekyll 网站上的文档中建议的方法来做到这一点。

从网站:

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 %}

☝️ 将为您提供 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 %}
于 2019-03-09T22:22:58.110 回答