HUGOのPaninateで一覧ページを出し分ける方法
HUGOで作成したサイトの一覧ページを、ピラーページのようにしたいなと思いました。
HUGOの一覧ページにコンテンツを入れる方法
コンテンツを入れること自体は一覧ページの_index.md
に、コンテンツを書いて、セクションページのテンプレートで呼びだせば実装できます。
section.html
{{ .Content }}
上記のコードだけで、コンテンツの表示ができますが、Paginator機能を使うと少し厄介になります。
というのも、ページ下部で記事一覧を表示するようにしたらページを切り替えるたびに{{ .Content }}
の内容が表示されるのです。
短いコンテンツなら気にならないのですが、ピラーページのようにしたら邪魔でした。
1ページ目はピラーページとしてワークしてもらって、2ページ目移行は普通の記事一覧として機能するのが理想だなと。
で、実装しようとしたらすこしハマったので掲載します。
HUGOのPaninateで一覧ページを出し分ける方法
ハマったというものの、実装はこの3行で大丈夫です。
section.html
{{ if strings.HasPrefix .Paginator "Pager 1" }}
{{ .Content }}
{{ end }}
一応、ハマったポイントも共有しておきます。~/page/2
にアクセスしても、{{.Permalink}}
で出力される値は、親ページのURLなので、URLで処理をわけるのは無理でした。
なので、.Paginatorの持つ値で処理することにしたのですが、そこでもちょいハマり。
{{ print .Paginator }}
で出力される値が「Pager 1」「Pager 2」という形なので、値の一致で処理できると思ったらダメでした。
replaceとか使っても上手くいかず。
諦めかけたところで、strings.HasPrefix
を使ったところなんとか処理できました。
記事を書いてて気づいたのですが、strings.HasSuffix
を使って後方一致での処理もできるので、以下のように書きかえた方が少し短縮できますね。
section.html
{{ if strings.HasSuffix .Paginator "1" }}
{{ .Content }}
{{ end }}