内容管理

概述

参考:

Content(内容)

为了让静态站点生成器实现可扩展性和可管理型,我们可以为文章添加 FrontMatter(前页)Templates(模板)。Hugo 基于这种特性,设计时不仅考虑了开发人员,还考虑到了内容管理者和作者。

内容的部分

Content Sections(内容部分) 是根据 content/ 目录下的组织结构定义的页面集合。

所有包含 _index.md 文件的目录都称为一个 Section(部分)。默认情况下 content/ 下的所有一级目录都是自己的 Root Section(根部分)

比如:

content/
├── _index.md
├── blog
│   └── _index.md
├── docs
│   ├── _index.md
│   ├── front-matter-demo.md
│   └── markdown-demo.md
└── posts
    └── _index.md

整个网站分为三个 Sections,分为是 blog、docs、posts。说白了,blog/_index.md 文件就表示 blog/ 目录及其内的所有文件都属于 blog Section

部分的嵌套:

content
└── blog        <-- blog 部分, 因为这是在 content/ 下的一级目录
    ├── funny-cats
    │   ├── mypost.md
    │   └── kittens         <-- kittens 部分, 因为包含 _index.md 文件
    │       └── _index.md
    └── tech                <-- tech 部分, 因为包含 _index.md 文件
        └── _index.md

同时,若没有指定内容的类型,则内容的类型默认就是其 Section 的名称,详见下文内容的类型

内容的类型

Content Types(内容类型) 是一种组织内容的方式。用于:

Hugo 将内容放在 content/ 目录下,如果没有手动设置类型,那么 content/blog/my-first-event.md 这个路径下的 my-first-event.md 内容就是 blog 类型,即使用文件所在目录的目录名作为类型的名称

URL 的生成逻辑

参考:

  • 网页中的 URL 将会根据目录名和文件名生成
  • 目录名、文件名中各种字符、特殊符号变成 URL 之后将会进行一些特殊处理
    • 空格在 URL 中为 - 符号
    • 字母在 URL 中为小写
    • () 符号被删除

比如

  • content/zh-cn/docs/10.云原生/Cloud Native(云原生)/Cloud Native(云原生).md,访问该文件时,URL 为 http://localhost/docs/10.云原生/cloud-native云原生/cloud-native云原生/

FrontMatter(前页)

参考:

在每篇文档的开头,我们可以使用 TOML、YAML、JSON、ORG 这四种格式配置文档的元数据,通过这些元数据,我们可以让 Hugo 或 Hugo 主题提供更强大的功能。

各种格式使用不同的符号来识别:

+++
TOML 格式
+++


---
YAML 格式
---

{JSON 格式}

前页变量

在 FrontMatter 配置的元数据可以生成 FrontMatter Variables(前页变量),Hugo 具有如下预定义的前页变量

title # 文档的标题。

linktitle # 用于创建内容链接;如果设置,Hugo 将会使用 linkTitle 的值作为菜单栏、导航栏中文章的链接名称。 Hugo 还可以通过链接标题对内容列表进行排序。

下图是使用 Docsy 主题时,对这两个变量的使用效果:

image.png

data # 分配给此页面的日期时间。这通常是从 front matter 的日期字段中获取的,但这种行为是可配置的。

lastmod # 上次修改内容的日期

slug #

URL 管理

参考:

官方生成 URL 的默认规则:

  • 全部变为小写。可以通过 disablePathToLower 配置改变
  • 空格使用 - 代替
  • TODO: 待整理

最后修改 March 25, 2025: clearup (feb59d93)