まくまくHugo/Goノート
Markdown ファイルに本文が記述されていない場合だけ特別な出力をする
2018-11-02

例えば、あるページの Markdown ファイルが下記のように Frontmatter だけの記述になっていると、

---
title: "ページタイトル"
date: "2018-11-02"
---

テンプレートから Page 変数の {{ .Content }} を参照したときの値は空っぽになります。 このような場合だけ別の出力をしたい場合は、下記のように場合分け処理を記述します。

layouts/_default/single.html

...省略

{{ with .Content }}
  {{ . }}
{{ else }}
  <b>本文が記述されていません。</b>
{{ end }}

...省略

このような分岐出力は、セクションページ(_index.md)などで活用できると思います。 例えば、次のようにセクションテンプレートを記述しておけば、セクションページに本文が記述されている場合はその内容を表示し、本文が記述されていない場合はそのセクション直下のページリストを表示できます。

layouts/_default/section.html

...省略

{{- with .Content }}
  {{ . }}
{{- else }}
  <ul class="pageList">
    {{/* カレントセクション直下のセクション */}}
    {{- range .Sections }}
      <li><a href="{{ .RelPermalink }}">{{ .Title }}</a> /</li>
    {{- end -}}

    {{/* カレントセクション直下のページ(ホームだけ特殊処理) */}}
    {{- range (cond .IsHome (where $.Site.RegularPages "Section" "") .Pages) }}
      <li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
    {{- end }}
  </ul>
{{- end }}

...省略

コンテンツファイルの構成としては下記のような感じにしておき、

content/
 +-- mysection/
      +-- _index.md
      +-- page1.md
      +-- page2.md
      +-- page3.md

セクションページの mysection/_index.md に本文を記述する場合は、その中からサブページの page1.htmlpage2.html にリンクを張るように記述します。 本文を記述しなければ、自動的にサブページへのリンクが列挙されます。

2018-11-02