【问题标题】:Creating categories on Jekyll driven site在 Jekyll 驱动的网站上创建类别
【发布时间】:2012-03-24 12:38:47
【问题描述】:

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

我能想到的唯一方法是为根目录中的每个类别手动创建一个特定的 html 文件。但我确定一定有更动态的方式?

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

提前致谢!

布拉德

【问题讨论】:

    标签: ruby command-line jekyll


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我可能会手动设置一个类别文件夹并为我使用的每个不同标签创建一个 html 文件!谢谢你的帮助队友
    • 没问题,如果有帮助,请考虑投票和/或将此答案标记为已接受。谢谢!
    • @JonM - 但是如何动态访问site.categories.CATEGORY_NAME?换句话说,如何在第一个循环中将 CATEGORY_NAME 替换为 cat[0]
    • @JonM - 是的,这就是字符串,而liquid 不会将字符串转换为变量...甚至capture 也不会。幸运的是,cat[1] 是对cat[0] 中所有帖子的变量引用...所以确实有效。
    • +1 很好的答案。工作,毫无疑问! (我非常需要这个。)
    【解决方案2】:

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


    如果您不想使用插件,例如,如果您希望您的网站在 GitHub Pages 上运行,您只有两种选择:

    1. Create a single page which contains all categories, alphabetically sorted

    2. 确实为每个类别手动创建一个单独的 HTML 文件,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>
      

      有了这个布局文件,你只需要两行 YAML front-matter 就可以添加一个新的标签页面:
      (在这个例子中是 标签)

      /tags/jekyll/index.html:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        对于github页面,你可以用

        制作一个归档页面
        {% 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 被执行 categories x number_of_posts 次。另一方面,您将拥有一个存档页面,而无需使用任何插件。

        【讨论】:

        猜你喜欢
        • 2014-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-23
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        相关资源
        最近更新 更多