Jekyll博客显示一个类别下的帖子

时间:2015-01-25 22:24:42

标签: javascript jekyll

我想展示来自特定类别的帖子。例如,转到网址http://example.com/posts/programming会列出所有有"编程"的帖子。作为他们的类别。

我的一般博客索引如下所示

  {% for post in site.posts %}
    <div class="post-box">
      <div class="post-title">
        <a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a>
      </div>
      <span class="post-date">{{ post.date | date: "%b %-d, %Y" }}</span>
      <p class="post-excerpt">{{ post.excerpt }}</p>
      <div>
        {% for category in post.categories %}
          <a href="#">#{{ category }}</a>
        {% endfor %}
      </div>
    </div>
  {% endfor %}

如果Jekyll没有自动为每个类别提供特定网址,我必须根据给定的网址动态更改可用的帖子。我当然可以创建一个专用于每个类别的目录,然后在其中创建index.html,但必须有更好的方法。

如果有一种方法可以使用javascript动态地将{% for post in site.posts %}部分更改为{% for post in posts in some_category %},那将是完美的。任何帮助都会很棒。

3 个答案:

答案 0 :(得分:2)

  

我当然可以创建一个专用于每个类别的目录,然后在其中创建index.html,但必须有更好的方法。

这是一个很好的方法,它完全没有用,并且在gh-pages上完美运行。这正是我在自己的网站上所做的事情,因为我更喜欢在目录结构中按类别保存我的.md帖子,所以我只想:

/blog/
    /_posts/20015-01-01-my-awesome-post.md
    index.html

/labs/
    /_posts/20015-01-01-my-technical-post.md
    index.html

我觉得维护最好不要在_posts /中有1001个帖子而且我得到了我想要的非常永久链接结构而不在每个帖子前面输入类别。

答案 1 :(得分:1)

这正是https://github.com/jekyll/jekyll-archives正在做的事情。

答案 2 :(得分:1)

可以使用插件(为此,请参阅David Jacquel's answer ...但如果您想要托管,则无法使用它您的网站位于GitHub Pages,因为GitHub Pages supports only a few plugins, and jekyll-archives isn't one of them

因此,如果您无法使用插件,那么AFAIK除了手动为每个类别创建页面之外别无其他。 我不是JavaScript大师,但我确信用JavaScript动态更改类别是不可能的,因为Jekyll页面编译一次并且无法动态更改在运行时。

但为每个类别创建一个新的类别页面并不像看起来那么多。

我在这里有一篇博文,解释如何做到这一点:
Separate pages per tag/category with Jekyll (without plugins)

简短版本:
(我在这里使用tags代替categories,但两者的工作方式完全相同)

  1. 制作一个特殊的layout file /_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>
    
  2. 使用此布局文件,您只需要两行YAML前端内容来创建新的标记页,例如/tags/jekyll/index.html

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