在Jekyll驱动的网站上创建类别

我很难理解如何为我在博客上使用的每个类别生成存档页面。 我希望用户能够点击某个类别,然后转到一个页面,列出所有分配了所需类别的文章。

我能想到的唯一方法是手动为根中的每个类别创建一个特定的html文件。 但我敢肯定必须有一种更有活力的方式吗?

我的网站托管在github上 – https://github.com/sirbrad/sirbrad.github.com

提前致谢!

布拉德

您可以使用site.categories数据生成所有可用类别的列表,使用每个类别的第一个元素(这是一个数组)来获取类别名称:

 {% for cat in site.categories %} 
  • {{ cat[0] }}
  • {% endfor %}

    您可以生成给定类别中所有post的列表,如下所示:

     {% for post in site.categories.CATEGORY_NAME %} 

    似乎不可能像您希望的那样为每个类别生成单独的HTML页面,但也许一个很好的折衷方案是生成包含所有类别列表的单个页面,其中每个类别包含该类别中的所有post。 然后,您可以使用一些简单的JavaScript来隐藏每个类别中的post,直到选择了类别名称,从而为每个类别提供与各个归档页面几乎相同的用户体验。

    注意:我在这里链接使用标签的示例(因为示例已经存在,带有标签),但它们对于类别的工作方式相同。


    如果您不想使用插件,例如,如果您希望您的网站使用GitHub页面,则只有两个选项:

    1. 创建一个包含所有类别的页面,按字母顺序排序

    2. 确实手动为每个类别创建一个单独的HTML文件, 但尽可能多地放入布局文件中,因此创建一个新的类别页面并不是很有效 :

      /_layouts/tagpage.html

       --- layout: default --- 

      {{ page.tag }}

        {% for post in site.tags[page.tag] %}
      • {{ post.date | date: "%B %d, %Y" }}: {{ post.title }}
      • {% endfor %}

      使用此布局文件,您只需要两行YAML前端内容即可添加新的标记页:
      (在这种情况下为jekyll标签)

      /tags/jekyll/index.html

       --- layout: tagpage tag: jekyll --- 

      因此,创建新标记页面的实际工作量是最小的 – 唯一的一点就是当您第一次使用新标记时需要记住这样做。

    您可以使用Dave Perett的generate_categories.rb插件为您网站中的每个类别自动创建一个页面。 然后,使用for循环运行您的站点类别,并为导航中的每个(或者您想要链接到存档页面的任何位置)创建链接,就像Jon在回答您的问题时所做的那样。

    对于github页面,您可以创建一个存档页面

     {% for pt in site.categories %}[{{pt[0]}}](#cat-{{pt[0]}}), {% endfor %} {% for cat in site.categories %} {% assign nt = cat[0] %} #### {{ nt }} {#cat-{{nt}}} 
      {% for post in site.posts %} {% for pt in post.categories %} {% if nt == pt %}
    • {{post.published}} {{ post.title }}
    • {% endif %} {% endfor %} {% endfor %}
    {% endfor %}

    在我的机器上,大约有200个post需要3个才能生成整个站点。 这是因为内部if被执行类别x number_of_posts次。 另一方面,您将拥有一个不使用任何插件的存档页面。