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

16

我很难理解如何为博客中使用的每个类别生成归档页面。我希望用户能够单击一个类别,然后进入一个页面,列出所有具有所需类别的文章。

我唯一能想到的方法是在根目录下手动创建一个特定的HTML文件来处理每个类别。但我肯定有更动态的方式?

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

提前感谢!

Brad

4个回答

22

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

{% for cat in site.categories %}
    <li>{{ cat[0] }}</li>
{% endfor %}

你可以这样生成给定分类下所有帖子的列表:

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

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


我可能会手动设置一个类别文件夹,并为我使用的每个不同标签创建一个HTML文件!感谢你的帮助,伙计。 - Brad
@JonM - 但是如何动态访问 site.categories.CATEGORY_NAME?换句话说,如何使用第一个循环中的 cat[0] 替换 CATEGORY_NAME - Peter Ajtai
1
@JonM - 是的,那就是字符串,而且Liquid不会将字符串转换为变量...即使使用capture也不行。幸运的是,cat[1]是对cat[0]中所有帖子的变量引用...所以这样可以工作。 - Peter Ajtai
+1 优秀的答案。毫无疑问地有效!(我非常需要这个。) - its_me

4
注意:这里链接的示例使用了标签(因为已经存在带有标签的示例),但对于类别,它们的工作方式相同。
如果您不想使用插件,例如希望您的网站在GitHub Pages上正常工作,那么您只有两个选择:
  1. Create a single page which contains all categories, alphabetically sorted

  2. Indeed create a separate HTML file for each category manually, but put as much as possible into a layout file, so creating a new category page isn't much work:

    /_layouts/tagpage.html:

    ---
    layout: default
    ---
    
    <h1>{{ page.tag }}</h1>
    
    <ul>
    {% for post in site.tags[page.tag] %}
      <li>
        {{ post.date | date: "%B %d, %Y" }}: <a href="{{ post.url }}">{{ post.title }}</a>
      </li>
    {% endfor %}
    </ul>
    

    With this layout file, you need only two lines of YAML front-matter to add a new tag page:
    (in this case for the tag)

    /tags/jekyll/index.html:

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

    So the actual effort to create a new tag page is minimal - the only thing is that you need to remember to do it when you're using a new tag for the first time.


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

0

对于 Github Pages,您可以使用以下方法创建存档页面:

{% for pt in site.categories %}[{{pt[0]}}](#cat-{{pt[0]}}), {% endfor %}

{% for cat in site.categories %}
{% assign nt = cat[0] %}

#### {{ nt }} {#cat-{{nt}}}
<ul> 
  {% for post in site.posts %}
     {% for pt in post.categories %}
    {% if nt == pt %}
      <li>
        {{post.published}} <a href="{{ post.url }}">{{ post.title }}</a>
      </li>
    {% endif %}  
   {% endfor %} 
  {% endfor %}
</ul>  
{% endfor %}

在我的电脑上,大约有200篇文章,生成整个网站需要3秒钟。这是因为内部if语句被执行了分类x文章数次。另一方面,您可以使用归档页面而不使用任何插件。

我找到了更好的方法来做这件事:https://dev59.com/DGEi5IYBdhLWcg3w4PhB - pvilas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接