快轉到主要內容

Sites Matrix

查看原始碼編輯此頁 (外部連結)

本文說明 Sites Matrix,Hugo 每個語言都是獨立的 site,而 Hugo v0.153.0 (外部連結) 進一步將原本單一維度的「一個 language 對應一個 site」提升到三個維度的組合。

三個維度 此標題的連結

新模型的 site 三個維度定義如下:

  • language:語言
  • version:版本
  • role:角色,例如同一份文檔要給開發者看的版本,跟給一般使用者看的版本

在多種語言、多個版本、多種角色的組合下會產生多個 site,例如 4 種語言 × 5 個版本 × 2 種角色,可以產生 80 個 site。

Sites Matrix 此標題的連結

Sites Matrix (外部連結) 是用來指定某份內容或某個模板該套用到哪些 site 組合的設定,用 sites.matrix 表示,可以分別限制 languages、versions、roles。

多個維度同時出現時是 AND 條件,例如同時限制 languages 與 versions,代表只有語言與版本都符合的 site 才會套用,以 module mount 為例:

hugo.yaml
module:
  mounts:
    - sites:
        matrix:
          languages:
            - zh-cn
          versions:
            - v2.0.0

代表指定 zh-cn 的 v2.0.0。Hugo 使用到 sites 的地方包含

實際設定 此標題的連結

以多版本網站,一個版本對應一個資料夾為例:

hugo.yaml
baseURL: https://example.org/
locale: en-US
title: Sites Matrix
defaultContentVersion: v2.0.0
defaultContentVersionInSubdir: true
versions:
  v1.0.0: {}
  v2.0.0: {}
module:
  mounts:
    - source: content/v2.0.0
      target: content
      sites:
        matrix:
          versions:
            - v2.0.0
    - source: content/v1.0.0
      target: content
      sites:
        matrix:
          versions:
            - v1.0.0

這樣設定後,content/v1.0.0/ 底下的所有內容將只出現在 v1.0.0 這個 site,v2.0.0 也同理。

也支援在 front matter 寫版本限制:

index.md
---
title: New Feature
sites:
  matrix:
    versions: ["> v3.0.0"]
---

不受版本控制的內容則可以建立專屬目錄:

hugo.yaml
module:
  mounts:
    - source: content/unversioned
      target: content
      sites:
        matrix:
          versions: "**"  # 掛載到所有版本

補集 此標題的連結

與 matrix.mounts.sites.matrix 同級的設定還有 complements(補集),用途是讓其他語言版本在缺少對應資源時,可以借用這份內容來補齊。

以實際範例說明:

hugo.yaml
module:
  mounts:
    - source: content/zh-cn
      target: content
      sites:
        matrix:
          languages:
            - zh-cn
    - source: content/en
      target: content
      sites:
        matrix:
          languages:
            - 'en'
        complements:
          languages:
           - "*"

中文和英文都只 mount 到自己的 sites,但是英文設定為所有語言的補集,因此當中文網站缺少英文網站的對應頁面時,缺少的頁面會使用英文站的版本,不會生成中文站的檔案。

差異是當中文網站缺少頁面,其他頁面指向該頁面的連結會直接以英文站的替代,瀏覽時會跨過中英文網站。

搭配模板 此標題的連結

模板可以用 .Rotate (外部連結) 取得當前 logical path 在其他維度組合下的對應版本,以版本切換按鈕為例:

{{- with .Rotate "version" -}}
  <div>
    {{- range . -}}
      <a href="{{ .RelPermalink }}">{{ .Site.Version.Name }}</a>
    {{- end -}}
  </div>
{{- end -}}

參考 此標題的連結

無障礙設定

字體大小