簡體   English   中英

在Jekyll驅動的網站上創建類別

[英]Creating categories on Jekyll driven site

我很難理解如何為我在博客上使用的每個類別生成存檔頁面。 我希望用戶能夠點擊某個類別,然后轉到一個頁面,列出所有分配了所需類別的文章。

我能想到的唯一方法是手動為根中的每個類別創建一個特定的html文件。 但我敢肯定必須有一種更有活力的方式嗎?

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

提前致謝!

布拉德

您可以使用site.categories數據生成所有可用類別的列表,使用每個類別的第一個元素(這是一個數組)來獲取類別名稱:

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

並且您可以生成給定類別中所有帖子的列表,如下所示:

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

似乎不可能像您希望的那樣為每個類別生成單獨的HTML頁面,但也許一個很好的折衷方案是生成包含所有類別列表的單個頁面,其中每個類別包含該類別中的所有帖子。 然后,您可以使用一些簡單的JavaScript來隱藏每個類別中的帖子,直到選擇了類別名稱,從而為每個類別提供與各個存檔頁面幾乎相同的用戶體驗。

注意:我在這里鏈接使用標簽的示例(因為示例已經存在,帶有標簽),但它們對於類別的工作方式相同。


如果您不想使用插件,例如,如果您希望您的網站使用GitHub頁面,則只有兩個選項:

  1. 創建一個包含所有類別的頁面,按字母順序排序

  2. 確實手動為每個類別創建一個單獨的HTML文件, 但盡可能多地放入布局文件中,因此創建一個新的類別頁面並不是很有用

    /_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前端內容即可添加新的標記頁:
    (在這種情況下為標簽)

    /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}}}
<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 number_of_posts次。 另一方面,您將擁有一個不使用任何插件的存檔頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM