資料檔案

除了 Jekyll 提供的 內建變數 之外,您還可以指定自己的自訂資料,這些資料可透過 Liquid 範本系統 存取。

Jekyll 支援從 YAMLJSONCSVTSV 檔案載入資料,這些檔案位於 _data 目錄中。請注意,CSV 和 TSV 檔案必須包含標題列。

這個強大的功能讓您可以在範本中避免重複,並在不變更 _config.yml 的情況下設定網站特定選項。

外掛程式/佈景主題也可以利用資料檔案來設定設定變數。

資料資料夾

您可以將 _data 資料夾用於儲存額外資料,供 Jekyll 在產生您的網站時使用。這些檔案必須是 YAML、JSON、TSV 或 CSV 檔案(使用 .yml.yaml.json.tsv.csv 副檔名),而且可透過 site.data 存取。

範例:成員清單

以下是使用資料檔案來避免在 Jekyll 範本中複製貼上大量程式碼的基本範例

_data/members.yml

- name: Eric Mill
  github: konklone

- name: Parker Moore
  github: parkr

- name: Liu Fengyun
  github: liufengyun

_data/members.csv

name,github
Eric Mill,konklone
Parker Moore,parkr
Liu Fengyun,liufengyun

可透過 site.data.members 存取這些資料(請注意,檔案的基本檔名決定變數名稱,因此應避免在同一個目錄中使用具有相同基本檔名但不同副檔名的資料檔案)。

您現在可以在範本中呈現成員清單

<ul>
{% for member in site.data.members %}
  <li>
    <a href="https://github.com/{{ member.github }}">
      {{ member.name }}
    </a>
  </li>
{% endfor %}
</ul>

子資料夾

資料檔案也可以放置在 _data 資料夾的子資料夾中。每個資料夾層級會新增到變數的命名空間。以下範例顯示如何將 GitHub 組織分別定義在 orgs 資料夾下的檔案中

_data/orgs/jekyll.yml

username: jekyll
name: Jekyll
members:
  - name: Tom Preston-Werner
    github: mojombo

  - name: Parker Moore
    github: parkr

_data/orgs/doeorg.yml

username: doeorg
name: Doe Org
members:
  - name: John Doe
    github: jdoe

然後可透過 site.data.orgs 存取這些組織,後接檔案名稱

<ul>
{% for org_hash in site.data.orgs %}
{% assign org = org_hash[1] %}
  <li>
    <a href="https://github.com/{{ org.username }}">
      {{ org.name }}
    </a>
    ({{ org.members | size }} members)
  </li>
{% endfor %}
</ul>

範例:存取特定作者

頁面和文章也可以存取特定資料項目。下列範例顯示如何存取特定項目

_data/people.yml:

dave:
    name: David Smith
    twitter: DavidSilvaSmith

然後,作者可以在文章的前置標記中指定為頁面變數

---
title: sample post
author: dave
---

{% assign author = site.data.people[page.author] %}
<a rel="author"
  href="https://twitter.com/{{ author.twitter }}"
  title="{{ author.name }}">
    {{ author.name }}
</a>

有關如何為您的網站建立穩健的導覽資訊(特別是如果您有文件網站或其他具有大量頁面需要整理的 Jekyll 網站),請參閱 導覽

CSV/TSV 解析選項

Ruby 解析 CSV 和 TSV 檔案的方式可以使用 csv_readertsv_reader 組態選項自訂。每個組態金鑰都公開相同的選項

converters:解析檔案時應使用哪些 CSV 轉換器。可用的選項包括 integerfloatnumericdatedate_timeall。預設情況下,此清單為空。 encoding:檔案的編碼為何。預設為網站 encoding 組態選項。 headers:布林欄位,表示是否將檔案的第一行解析為標頭。當為 false 時,它將第一列視為資料。預設為 true

範例

csv_reader:
    converters:
      - numeric
      - datetime
    headers: true
    encoding: utf-8
tsv_reader:
    converters:
      - all
    headers: false