主要 Sections

mainSections 參數用於過濾頁面,默認為 ["posts", "docs"]

1mainSections = ["blog", "posts", "docs", "notes"]

Front Matter

Front Matter is the place where we put page metadata and parameters, such as title, date and so on.

Formats

Hugo supports three formats of front matter: YAML, TOML and JSON.

  • TOML: identified by opening and closing +++.
  • YAML: identified by opening and closing ---.
  • JSON: a single JSON object surrounded by { and }, followed by a new line.

Let’s take TOML as an example:

1+++
2title = 'Hello world!'
3+++

See also Page Parameters and Hugo Front Matter.

內容類型

你可能想在其他 Section 中使用 docs 布局,比如 /notes。這可以通過在 front matter 中設置 type = "docs" 實現。

文章原型

我們也可以為 notes 創建一個原型,讓 Hugo 處理 type

1$ cp themes/hugo-theme-bootstrap/archetypes/default.md archetypes/notes.md

然後在 archetypes/notes.md 中添加 type = "docs"。現在 hugo new notes/blah-blah-blah 將會復製 archetypes/notes.md 的內容到新的文章。

同樣地,你也可以為 postsdocs 等自定義原型。

Sections 模板

你可能還想在 notes 中使用和 docs 一樣的列表布局。

1{{ define "content" }}
2{{- partial "docs/nav" . -}}
3<div class="col-xxl-7 ms-auto">
4  {{ partial "docs/list" . }}
5</div>
6{{- partial "docs/sidebar" . -}}
7{{ end }}

書寫文章

假設默認語言為 en

1$ hugo new posts/new-post/index.md

上述命令創建了一篇英文文章,同樣的,我們也可以創建一篇簡體中文的文章:

1$ hugo new posts/new-post/index.zh-tw.md

請注意:創建的文章一般處於草稿狀態,本地預覽時,hugo server 需要指定 -D 參數才能預覽草稿文章。文章發佈時,需要將 draft 改為 false,或者直接移除 draft 參數。

摘要選擇順序

  1. If the description is not empty, then it’ll be used, to use summaries all the time, you should set the post.excerpt as empty string explicitly.
  2. Manual splitting via <!–more–>.
  3. If summary on front matter isn’t empty, then summary will be selected.
  4. The text of content will be cut off by post.excerptMaxLength and formatted in plain text or HTML when post.plainifyExcerpt = true.
1[post]
2  # excerptMaxLength = 120
3  # copyright = false # Whether to display copyright section on each post.
4  # plainifyExcerpt = false # Format excerpt in HTML if false.

特色圖片選擇順序

  1. The images on front matter are preferred.
  2. Page images resources that match the *feature* pattern. Such as posts/my-page/feature.png, posts/my-page/featured-sample.jpg.

The featured image doesn’t show up above content by default, you’ll need to turn on this feature by following parameter.

config/_default/params.toml

1[post]
2  featuredImage = true

config/_default/params.yaml

1post:
2  featuredImage: true

config/_default/params.json

1{
2   "post": {
3      "featuredImage": true
4   }
5}

縮略圖選擇順序

  1. The images on front matter are preferred.
  2. Page images resources that match the filename’s patterns: *feature*, *cover* and *thumbnail*. Such as posts/my-page/feature.png, posts/my-page/thumnail.jpg.

The page images resources will be resized to several smaller versions to suit the users devices for saving the bandwidth.

文章置頂

你可以通過在 front matter 設置 pinnedtrue 以置頂文章。

1+++
2title = "Pinned Post"
3pinned = true
4pinnedWeight = 100
5+++

如果有多個置頂文章,那麽將按照 pinnedWeight 進行降序排序。

站點配置

1pinnedPost = false # 關閉文章置頂功能
2pinnedPostCount = 2 # 首頁顯示的置頂文章的數目

將文章于 carousel 顯示。

1+++
2carousel = true
3+++

作者

HBS supports the authors taxonomy. Firstly, you’ll need to enable it by setting the following configuration.

config.toml

1[taxonomies]
2  author = 'authors'

config.yaml

1taxonomies:
2  author: authors

config.json

1{
2   "taxonomies": {
3      "author": "authors"
4   }
5}

And then define the authors on your posts.

1+++
2authors = [
3  "Foo",
4  "Bar"
5]
6+++

Now, the authors will be present on the post meta and sidebar taxonomies.

Finally, we may need to introduce the author in more detail. Take the Foo as an example, just create a page with the following content and save it as /content/authors/foo/index.md.

1---
2title: Razon Yang
3description: Gopher, PHPer, Full Stack Engineer.
4social:
5  github: razonyang
6  twitter: razonyang
7---
  • title: The author display name.
  • description: The introduction.
  • social: Social links.

The author image should be placed at the same folder with pattern avatar*, such as /content/authors/foo/avatar.png. If there is no avatar, the social.email will be used to generate Gravatar avatar.

下一步