前置事項預設值

使用 前置事項 是您可以在網站的頁面和文章中指定設定的一種方式。設定例如預設版面、自訂標題或為文章指定更精確的日期/時間,都可以在您的頁面或文章前置事項中新增。

通常,您會發現自己重複許多設定選項。在每個檔案中設定相同的版面、為文章新增相同的類別(或類別)等等。您甚至可以新增自訂變數,例如作者名稱,這可能是您部落格上大多數文章都相同的。

Jekyll 提供了一種在網站設定中設定這些預設值的方式,而不是每次建立新文章或頁面時都重複此設定。為此,您可以使用專案根目錄中的 _config.yml 檔案中的 defaults 鍵來指定全站預設值。

defaults 鍵包含一個範圍/值配對陣列,定義應為特定檔案路徑設定哪些預設值,以及該路徑中的檔案類型(如果有的話)。

假設您想要將預設版面新增到網站中的所有頁面和文章。您會將它新增到 _config.yml 檔案中

defaults:
  -
    scope:
      path: "" # an empty string here means all files in the project
    values:
      layout: "default"
停止並重新執行 `jekyll serve` 指令。

_config.yml 主設定檔包含在執行時一次讀取的全球設定和變數定義。在自動重新產生期間對 _config.yml 所做的變更,直到下次執行才會載入。

請注意,資料檔案 會在自動重新產生期間包含並重新載入。

在此,我們將 values 範圍設定為存在於路徑 scope 中的任何檔案。由於路徑設定為空字串,因此它會套用至專案中的所有檔案。您可能不想要設定專案中每個檔案的版面,例如 css 檔案,因此您也可以在 scope 鍵下指定 type 值。

defaults:
  -
    scope:
      path: "" # an empty string here means all files in the project
      type: "posts" # previously `post` in Jekyll 2.2.
    values:
      layout: "default"

現在,這只會設定類型為 posts 的檔案版面。可供您使用的不同類型為 pagespostsdrafts 或網站中的任何彙整。雖然 type 是選用的,但您必須在建立 scope/values 配對時,為 path 指定值。

如同先前所述,您可以為 defaults 設定多個 scope/values 配對。

defaults:
  -
    scope:
      path: ""
      type: "pages"
    values:
      layout: "my-site"
  -
    scope:
      path: "projects"
      type: "pages" # previously `page` in Jekyll 2.2.
    values:
      layout: "project" # overrides previous default layout
      author: "Mr. Hyde"

使用這些預設值,所有頁面都會使用 my-site 版面。如果存在於 projects/ 資料夾中的任何 html 檔案,如果存在,將會使用 project 版面。這些檔案也會將 page.author liquid 變數 設定為 Mr. Hyde

collections:
  my_collection:
    output: true

defaults:
  -
    scope:
      path: ""
      type: "my_collection" # a collection in your site, in plural form
    values:
      layout: "default"

在此範例中,layout 設定為 default,位於名稱為 my_collection集合 內。

Front Matter 預設值中的 Glob 模式

在比對預設值時,也可以使用 Glob 模式(目前僅限於包含 * 的模式)。例如,可以為 section 資料夾的任何子資料夾中的每個 special-page.html 設定特定版面。3.7.0

collections:
  my_collection:
    output: true

defaults:
  -
    scope:
      path: "section/*/special-page.html"
    values:
      layout: "specific-layout"
Glob 和效能

請注意,Glob 路徑已知會對效能產生負面影響,目前尚未最佳化,特別是在 Windows 上。Glob 路徑會根據關聯集合目錄的大小成比例地增加建置時間。

優先順序

Jekyll 會套用您在 _config.yml 檔案的 defaults 區段中指定的全部組態設定。您可以透過為範圍指定更明確的路徑來選擇覆寫其他範圍/值配對的設定。

您可以在上面倒數第二個範例中看到。首先,我們將預設頁面版面設定為 my-site。然後,使用更明確的路徑,我們將 projects/ 路徑中頁面的預設版面設定為 project。這可以使用您會在頁面或文章前置資料中設定的任何值來完成。

最後,如果您透過在 _config.yml 檔案中新增 defaults 區段來設定網站設定中的預設值,您可以在文章或頁面檔案中覆寫這些設定。您只需要在文章或頁面開頭設定中指定設定即可。例如

# In _config.yml
...
defaults:
  -
    scope:
      path: "projects"
      type: "pages"
    values:
      layout: "project"
      author: "Mr. Hyde"
      category: "project"
...
# In projects/foo_project.md
---
author: "John Smith"
layout: "foobar"
---
The post text goes here...

當網站建置時,projects/foo_project.mdlayout 會設定為 foobar,而非 project,而 author 會設定為 John Smith,而非 Mr. Hyde