# 分类法支持

> 使用标签、类别、标记等分类法组织内容。

---

LLMS index: [llms.txt](/oink.pgsty.com/llms.txt)

---

OINK 在文档与博客分区中支持 Hugo
[分类法][]。本页既展示默认布局，也可以用来测试生成链接的行为。

## 术语 {#terminology}

使用分类法前，需要理解以下术语：

- **分类法（Taxonomy）**：用于对内容进行分类的体系，例如标签、类别、项目、人物。

- **术语（Term）**：分类法中的一个键。例如，在“项目”分类法中可以有“项目 A”和“项目 B”。

- **值（Value）**：分配给某个术语的一项内容，例如属于特定项目的站点页面。

Hugo 文档提供了一个[电影网站分类法示例][]。

[电影网站分类法示例]:
  https://gohugo.io/content-management/taxonomies/#example-taxonomy-movie-website

## 参数 {#parameters}

项目[配置文件][]中有多项参数可以控制分类法功能。Hugo 默认启用 `tags` 与
`categories` 分类法。要 **禁用** 分类法，请在项目配置中添加：

<!-- markdownlint-disable no-shortcut-ref-link -->
<!-- prettier-ignore-start -->





<ul class="nav nav-tabs" id="tabs-0" role="tablist"><li class="nav-item"><button class="nav-link disabled" id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab" aria-controls="tabs-00-00" aria-selected="false" disabled aria-disabled="true">配置文件：</button></li><li class="nav-item"><button class="nav-link active" id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab" data-td-tp-persist="toml" aria-controls="tabs-00-01" aria-selected="true">hugo.toml</button></li><li class="nav-item"><button class="nav-link" id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab" data-td-tp-persist="yaml" aria-controls="tabs-00-02" aria-selected="false">hugo.yaml</button></li><li class="nav-item"><button class="nav-link" id="tabs-00-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-03" role="tab" data-td-tp-persist="json" aria-controls="tabs-00-03" aria-selected="false">hugo.json</button></li></ul>

<div class="tab-content" id="tabs-0-content"><div class="tab-pane fade" id="tabs-00-00" role="tabpanel" aria-labelledby="tabs-00-00-tab" tabindex="0"><pre tabindex="0"><code></code></pre></div><div class="tab-pane fade show active" id="tabs-00-01" role="tabpanel" aria-labelledby="tabs-00-01-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">disableKinds</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;taxonomy&#34;</span><span class="p">]</span></span></span></code></pre></div></div><div class="tab-pane fade" id="tabs-00-02" role="tabpanel" aria-labelledby="tabs-00-02-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">disableKinds</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">taxonomy]</span></span></span></code></pre></div></div><div class="tab-pane fade" id="tabs-00-03" role="tabpanel" aria-labelledby="tabs-00-03-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;disableKinds&#34;</span><span class="p">:</span> <span class="p">[</span> <span class="s2">&#34;taxonomy&#34;</span> <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
</div>

<!-- prettier-ignore-end -->
<!-- markdownlint-enable no-shortcut-ref-link -->

保持默认设置时，Hugo 会生成 `tags` 与 `categories`
的分类法页面。如果要使用其他分类法，需要在[配置文件][]中定义。如果希望自定义分类法与默认的
`tags`、`categories`
并存，也必须把默认分类法一并写入配置。每种分类法都需要提供单数与复数标签。

下面的示例在默认 `tags` 和 `categories` 之外，又定义了 `projects` 分类法：

<!-- markdownlint-disable no-shortcut-ref-link -->
<!-- prettier-ignore-start -->





<ul class="nav nav-tabs" id="tabs-1" role="tablist"><li class="nav-item"><button class="nav-link disabled" id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab" aria-controls="tabs-01-00" aria-selected="false" disabled aria-disabled="true">配置文件：</button></li><li class="nav-item"><button class="nav-link active" id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab" data-td-tp-persist="toml" aria-controls="tabs-01-01" aria-selected="true">hugo.toml</button></li><li class="nav-item"><button class="nav-link" id="tabs-01-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-02" role="tab" data-td-tp-persist="yaml" aria-controls="tabs-01-02" aria-selected="false">hugo.yaml</button></li><li class="nav-item"><button class="nav-link" id="tabs-01-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-03" role="tab" data-td-tp-persist="json" aria-controls="tabs-01-03" aria-selected="false">hugo.json</button></li></ul>

<div class="tab-content" id="tabs-1-content"><div class="tab-pane fade" id="tabs-01-00" role="tabpanel" aria-labelledby="tabs-01-00-tab" tabindex="0"><pre tabindex="0"><code></code></pre></div><div class="tab-pane fade show active" id="tabs-01-01" role="tabpanel" aria-labelledby="tabs-01-01-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">taxonomies</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">tag</span> <span class="p">=</span> <span class="s2">&#34;tags&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">category</span> <span class="p">=</span> <span class="s2">&#34;categories&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">project</span> <span class="p">=</span> <span class="s2">&#34;projects&#34;</span></span></span></code></pre></div></div><div class="tab-pane fade" id="tabs-01-02" role="tabpanel" aria-labelledby="tabs-01-02-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">taxonomies</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">tag</span><span class="p">:</span><span class="w"> </span><span class="l">tags</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">category</span><span class="p">:</span><span class="w"> </span><span class="l">categories</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">project</span><span class="p">:</span><span class="w"> </span><span class="l">projects</span></span></span></code></pre></div></div><div class="tab-pane fade" id="tabs-01-03" role="tabpanel" aria-labelledby="tabs-01-03-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;taxonomies&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;tag&#34;</span><span class="p">:</span> <span class="s2">&#34;tags&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;category&#34;</span><span class="p">:</span> <span class="s2">&#34;categories&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;project&#34;</span><span class="p">:</span> <span class="s2">&#34;projects&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
</div>

<!-- prettier-ignore-end -->
<!-- markdownlint-enable no-shortcut-ref-link -->

项目配置中的以下参数可控制两类输出：文档和博客文章页显示的分类法术语，以及 OINK 右侧栏显示的“标签云”：

<!-- markdownlint-disable no-shortcut-ref-link -->
<!-- prettier-ignore-start -->





<ul class="nav nav-tabs" id="tabs-2" role="tablist"><li class="nav-item"><button class="nav-link disabled" id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab" aria-controls="tabs-02-00" aria-selected="false" disabled aria-disabled="true">配置文件：</button></li><li class="nav-item"><button class="nav-link active" id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab" data-td-tp-persist="toml" aria-controls="tabs-02-01" aria-selected="true">hugo.toml</button></li><li class="nav-item"><button class="nav-link" id="tabs-02-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-02" role="tab" data-td-tp-persist="yaml" aria-controls="tabs-02-02" aria-selected="false">hugo.yaml</button></li><li class="nav-item"><button class="nav-link" id="tabs-02-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-03" role="tab" data-td-tp-persist="json" aria-controls="tabs-02-03" aria-selected="false">hugo.json</button></li></ul>

<div class="tab-content" id="tabs-2-content"><div class="tab-pane fade" id="tabs-02-00" role="tabpanel" aria-labelledby="tabs-02-00-tab" tabindex="0"><pre tabindex="0"><code></code></pre></div><div class="tab-pane fade show active" id="tabs-02-01" role="tabpanel" aria-labelledby="tabs-02-01-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">params</span><span class="p">.</span><span class="nx">taxonomy</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">taxonomyCloud</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;projects&#34;</span><span class="p">,</span> <span class="s2">&#34;tags&#34;</span><span class="p">]</span> <span class="c"># set taxonomyCloud = [] to hide taxonomy clouds</span>
</span></span><span class="line"><span class="cl"><span class="nx">taxonomyCloudTitle</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;Our Projects&#34;</span><span class="p">,</span> <span class="s2">&#34;Tag Cloud&#34;</span><span class="p">]</span> <span class="c"># if used, must have same length as taxonomyCloud</span>
</span></span><span class="line"><span class="cl"><span class="nx">taxonomyPageHeader</span> <span class="p">=</span> <span class="p">[</span><span class="s2">&#34;tags&#34;</span><span class="p">,</span> <span class="s2">&#34;categories&#34;</span><span class="p">]</span> <span class="c"># set taxonomyPageHeader = [] to hide taxonomies on the page headers</span></span></span></code></pre></div></div><div class="tab-pane fade" id="tabs-02-02" role="tabpanel" aria-labelledby="tabs-02-02-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">params</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">taxonomy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">taxonomyCloud</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">projects   </span><span class="w"> </span><span class="c"># remove all entries</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">tags       </span><span class="w"> </span><span class="c"># to hide taxonomy clouds</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">taxonomyCloudTitle</span><span class="p">:</span><span class="w">   </span><span class="c"># if used, must have the same</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">Our Projects     </span><span class="w"> </span><span class="c"># number of entries as taxonomyCloud</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">Tag Cloud</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">taxonomyPageHeader</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">tags       </span><span class="w"> </span><span class="c"># remove all entries</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">categories </span><span class="w"> </span><span class="c"># to hide taxonomy clouds</span></span></span></code></pre></div></div><div class="tab-pane fade" id="tabs-02-03" role="tabpanel" aria-labelledby="tabs-02-03-tab" tabindex="0"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;params&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;taxonomy&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;taxonomyCloud&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;projects&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;tags&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;taxonomyCloudTitle&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Our Projects&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Tag Cloud&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;taxonomyPageHeader&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;tags&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;categories&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div></div>
</div>

<!-- prettier-ignore-end -->
<!-- markdownlint-enable no-shortcut-ref-link -->

以上设置只会在 OINK 右侧栏中显示 `projects` 和 `tags` 的分类云（标题分别为“ Our
Projects”和“Tag Cloud”），并在每个页面显示 `tags` 和 `categories`
分类法中已经分配的术语。

要禁用所有分类云，请设置 `taxonomyCloud = []`；如果不想显示已分配术语，请设置
`taxonomyPageHeader = []`。

默认情况下，分类法的复数标签会用作分类云标题。可以通过 `taxonomyCloudTitle`
覆盖默认标题，但这样做时，必须为每个启用的分类云手工定义一个标题；`taxonomyCloud`
与 `taxonomyCloudTitle` 的长度必须相同。

如果没有设置 `taxonomyCloud` 或
`taxonomyPageHeader`，系统会为所有已定义分类法生成相应的分类云或已分配术语。

## Partial {#partials}

显示分类法时默认使用的 partial 经过专门设计，可以方便地在自定义布局中复用。

### `taxonomy_terms_article` {#taxonomy_terms_article}

`taxonomy_terms_article` partial 会显示一篇文章或页面（partial 参数
`context`，通常是当前页面或上下文 `.`）在指定分类法（partial 参数
`taxo`）中分配到的全部术语。

下面是在 `layouts/docs/list.html` 中为文档分区每个页面的 header 使用它的示例：

```go-html-template
{{ $context := . }}
{{ range $taxo, $taxo_map := .Site.Taxonomies }}
  {{ partial "taxonomy_terms_article.html" (dict "context" $context "taxo" $taxo ) }}
{{ end }}
```

它会针对当前页面（或上下文）中的每个已定义分类法，输出一份包含全部已分配术语的列表：

```html
<div class="taxonomy taxonomy-terms-article taxo-categories">
  <h5 class="taxonomy-title">Categories:</h5>
  <ul class="taxonomy-terms">
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/categories/taxonomies/"
        data-taxonomy-term="taxonomies"
        ><span class="taxonomy-label">Taxonomies</span></a
      >
    </li>
  </ul>
</div>
<div class="taxonomy taxonomy-terms-article taxo-tags">
  <h5 class="taxonomy-title">Tags:</h5>
  <ul class="taxonomy-terms">
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/tags/tagging/"
        data-taxonomy-term="tagging"
        ><span class="taxonomy-label">Tagging</span></a
      >
    </li>
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/tags/structuring-content/"
        data-taxonomy-term="structuring-content"
        ><span class="taxonomy-label">Structuring Content</span></a
      >
    </li>
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/tags/labelling/"
        data-taxonomy-term="labelling"
        ><span class="taxonomy-label">Labelling</span></a
      >
    </li>
  </ul>
</div>
```

### `taxonomy_terms_article_wrapper` {#taxonomy_terms_article_wrapper}

`taxonomy_terms_article_wrapper` 是 `taxonomy_terms_article`
的包装 partial，只有一个 `context` 参数（通常是当前页面或上下文
`.`）。它会检查项目 `hugo.toml`、`hugo.yaml` 或 `hugo.json` 中的分类法参数，遍历
`taxonomyPageHeader` 中列出的全部分类法；如果没有设置
`taxonomyPageHeader`，则遍历页面定义的全部分类法。

### `taxonomy_terms_cloud` {#taxonomy_terms_cloud}

`taxonomy_terms_cloud` partial 会显示站点（partial 参数
`context`，通常是当前页面或上下文 `.`）在指定分类法（partial 参数
`taxo`）中使用的全部术语，并使用 `title` 参数作为标题。

下面是在 `taxonomy_terms_clouds` partial 中显示所有已定义分类法及其术语的示例：

```go-html-template
{{ $context := . }}
{{ range $taxo, $taxo_map := .Site.Taxonomies }}
  {{ partial "taxonomy_terms_cloud.html" (dict "context" $context "taxo" $taxo "title" ( humanize $taxo ) ) }}
{{ end }}
```

对于 `categories` 分类法，它会生成以下 HTML 标记：

```html
<div class="taxonomy taxonomy-terms-cloud taxo-categories">
  <h5 class="taxonomy-title">Cloud of Categories</h5>
  <ul class="taxonomy-terms">
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/categories/category-1/"
        data-taxonomy-term="category-1"
        ><span class="taxonomy-label">category 1</span
        ><span class="taxonomy-count">3</span></a
      >
    </li>
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/categories/category-2/"
        data-taxonomy-term="category-2"
        ><span class="taxonomy-label">category 2</span
        ><span class="taxonomy-count">1</span></a
      >
    </li>
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/categories/category-3/"
        data-taxonomy-term="category-3"
        ><span class="taxonomy-label">category 3</span
        ><span class="taxonomy-count">2</span></a
      >
    </li>
    <li>
      <a
        class="taxonomy-term"
        href="//localhost:1313/categories/category-4/"
        data-taxonomy-term="category-4"
        ><span class="taxonomy-label">category 4</span
        ><span class="taxonomy-count">6</span></a
      >
    </li>
  </ul>
</div>
```

### `taxonomy_terms_clouds` {#taxonomy_terms_clouds}

`taxonomy_terms_clouds` 是 `taxonomy_terms_cloud` 的包装 partial，只有一个
`context` 参数（通常是当前页面或上下文
`.`）。它会检查项目配置中的分类法参数，遍历 `taxonomyCloud`
列出的全部分类法；如果没有设置 `taxonomyCloud`，则遍历页面定义的全部分类法。

## 分类法的多语言支持 {#multi-language-support-for-taxonomies}

对于[多语言站点][]，分类法术语只会在各自语言站点内计数和链接。分类法配置参数也可以按语言分别调整。

[配置文件]: https://gohugo.io/configuration/introduction/#configuration-file
[多语言站点]: https://gohugo.io/configuration/params/#multilingual-projects
[分类法]: https://gohugo.io/content-management/taxonomies/
