まくまくHugo/Goノート
記事ページに複数のターム(カテゴリ)を割り当てた場合にエラーにする
2018-01-01
Hugo の仕組みでは、1つのタクソノミーに割り当てられるタームの数を制限することはできません。ここでは、複数のタームを割り当ててしまった場合に、エラー表示を行う方法を紹介します。

1つの記事ページに複数のタグを付けるのはよくあることですが、Web サイトのポリシーによっては、1つの記事に付けられるカテゴリーは1つまでに制限したい、ということがあるかもしれません。 Hugo のデフォルトの仕組みでは、そのような制限はできないのですが、複数のカテゴリが付けられた記事を表示したときに、ログとページ上にメッセージを表示することはできます。

下記のシングルページテンプレートでは、categories タクソノミーに2つ以上の値(ターム)が設定されている場合に警告メッセージを出力しています。 errorf 関数を使ってテキスト出力を行うことで、画面上への出力と同時に、コンソール上にもエラーメッセージを出力することができます。

layouts/_default/single.html(抜粋)

{{ if .Params.categories }}
  {{ if gt (len .Params.categories) 1 }}
    <b>{{ errorf "カテゴリが1つ以上設定されています!" }}</b>
  {{ end }}
{{ end }}
len .Params.categories を実行するときに、.Params.categories が存在しないと nil dereference のエラーになってしまいます。そのため、最初に if .Params.categories という存在チェックを行なっています。

例えば、記事ページの先頭の Front matter で、下記のように複数のカテゴリを割り当てるような記述をすると、上記の警告メッセージが表示されます。

content/sample-page.md

---
title: "サンプルページ"
categories: ["カテゴリ1", "カテゴリ2"]
---

サンプルページの本文。
2018-01-01