逐步教學

9. 集合

讓我們看看如何充實作者,讓每個作者都有自己的頁面,包含簡介和他們發布的文章。

要做到這一點,你將使用集合。集合類似於文章,但內容不必按日期分組。

設定

要設定集合,你需要告訴 Jekyll。Jekyll 設定會在一個名為 _config.yml 的檔案中進行(預設)。

在根目錄中建立 _config.yml,內容如下

collections:
  authors:

要(重新)載入設定,請重新啟動 jekyll 伺服器。在你的終端機中按 Ctrl+C 來停止伺服器,然後 jekyll serve 來重新啟動它。

新增作者

文件(集合中的項目)位於網站根目錄中名為 _*collection_name* 的資料夾中。在這個案例中,是 _authors

為每個作者建立一個文件

_authors/jill.md:

---
short_name: jill
name: Jill Smith
position: Chief Editor
---
Jill is an avid fruit grower based in the south of France.

_authors/ted.md:

---
short_name: ted
name: Ted Doe
position: Writer
---
Ted has been eating fruit since he was baby.

員工頁面

讓我們新增一個頁面,列出網站上的所有作者。Jekyll 會在 site.authors 中提供集合。

建立 staff.html 並在 site.authors 中反覆運算,以輸出所有員工

---
layout: default
title: Staff
---
<h1>Staff</h1>

<ul>
  {% for author in site.authors %}
    <li>
      <h2>{{ author.name }}</h2>
      <h3>{{ author.position }}</h3>
      <p>{{ author.content | markdownify }}</p>
    </li>
  {% endfor %}
</ul>

由於內容是 markdown,因此您需要透過 markdownify 篩選器執行它。在版面中使用 {{ content }} 輸出時,這會自動執行。

您還需要一種方法透過主要導覽列瀏覽到此頁面。開啟 _data/navigation.yml 並為員工頁面新增一則項目

- name: Home
  link: /
- name: About
  link: /about.html
- name: Blog
  link: /blog.html
- name: Staff
  link: /staff.html

輸出頁面

在預設情況下,集合不會為文件輸出頁面。在此情況下,我們希望每位作者都有自己的頁面,因此讓我們調整集合設定。

開啟 _config.yml 並將 output: true 新增至作者集合設定

collections:
  authors:
    output: true

再次重新啟動 jekyll 伺服器,讓設定變更生效。

您可以使用 author.url 連結至輸出頁面。

將連結新增至 staff.html 頁面

---
layout: default
title: Staff
---
<h1>Staff</h1>

<ul>
  {% for author in site.authors %}
    <li>
      <h2><a href="{{ author.url }}">{{ author.name }}</a></h2>
      <h3>{{ author.position }}</h3>
      <p>{{ author.content | markdownify }}</p>
    </li>
  {% endfor %}
</ul>

就像文章一樣,您需要為作者建立一個版面。

建立 _layouts/author.html,內容如下

---
layout: default
---
<h1>{{ page.name }}</h1>
<h2>{{ page.position }}</h2>

{{ content }}

預設前置資料

現在您需要設定作者文件,以使用 author 版面。您可以像之前一樣在前置資料中執行此操作,但這樣會重複。

您真正想要的是所有文章自動使用文章佈局,作者使用作者佈局,其他所有內容使用預設佈局。

您可以透過在 _config.yml 中使用 front matter 預設值 來達成此目的。設定預設值套用的範圍,然後設定您想要的預設 front matter。

將佈局預設值新增到 _config.yml 中,

collections:
  authors:
    output: true

defaults:
  - scope:
      path: ""
      type: "authors"
    values:
      layout: "author"
  - scope:
      path: ""
      type: "posts"
    values:
      layout: "post"
  - scope:
      path: ""
    values:
      layout: "default"

現在您可以從所有頁面和文章的 front matter 中移除佈局。請注意,任何時候您更新 _config.yml 時,您都需要重新啟動 Jekyll 才能讓變更生效。

列出作者的文章

讓我們在作者的頁面上列出作者已發布的文章。為此,您需要將作者 short_name 與文章 author 相符。您可以使用此方法依作者篩選文章。

_layouts/author.html 中反覆運算這個經過篩選的清單,以輸出作者的文章

---
layout: default
---
<h1>{{ page.name }}</h1>
<h2>{{ page.position }}</h2>

{{ content }}

<h2>Posts</h2>
<ul>
  {% assign filtered_posts = site.posts | where: 'author', page.short_name %}
  {% for post in filtered_posts %}
    <li><a href="{{ post.url }}">{{ post.title }}</a></li>
  {% endfor %}
</ul>

文章有連結到作者,因此我們將它連結到作者的頁面。您可以在 _layouts/post.html 中使用類似的篩選技術來執行此操作

---
layout: default
---
<h1>{{ page.title }}</h1>

<p>
  {{ page.date | date_to_string }}
  {% assign author = site.authors | where: 'short_name', page.author | first %}
  {% if author %}
    - <a href="{{ author.url }}">{{ author.name }}</a>
  {% endif %}
</p>

{{ content }}

開啟 http://localhost:4000,看看員工頁面和文章上的作者連結,以檢查所有內容是否正確連結在一起。

在本教學課程的下一步也是最後一步中,我們將為網站增添美感,並讓它準備好進行生產部署。

  1. 設定
  2. Liquid
  3. 前端資訊
  4. 版面
  5. 包含
  6. 資料檔案
  7. 資源
  8. 部落格
  9. 集合
  10. 部署