
はじめに
Decap CMSで記事をコツコツと書いてるのですが、気づけば記事数が1ページに収まらない数になりかけてきた為、2ページ目に画面を推移し、表示を切り替えるようにHugoのデフォルト機能を使いってみました。
config.toml に paginate を追加
表示件数をコントロールするには、設定ファイルに次を追加します:
[pagination]
pagerSize = 9
pagerSize の数値は1ページに表示する件数で、この設定では記事を9つ表示します。
htmlを修正
うちでは、list.htmlの中で、記事を表示しているので、該当開所を修正します。
layouts_default\list.html
※ 編集する html ファイルは環境によって異なると思うので、ご注意ください
content/posts/ 以下の記事を対象として記事を抽出し、post-card.htmlでカードを作成しています。
{{ $paginator := .Paginate (where .Site.RegularPages "Section" "posts") }}
<section class="post">
{{ range $paginator.Pages }}
{{ partial "post-card.html" . }}
{{ end }}
</section>
ちなに post-card.html は以下のようになってます。
<article class="post-card">
<a href="{{ .RelPermalink }}" class="full-link" aria-label="{{ .Title }}"></a>
<div class="thumb-wrapper">
{{ if .Params.image }}
<img src="{{ .Params.image }}" alt="{{ .Title }}" class="post-thumb">
{{ else }}
<img src="/images/noimage.jpg" alt="No image" class="post-thumb">
{{ end }}
</div>
<h3 class="post-title">
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
</h3>
<p class="post-date">{{ .Date.Format "2006-01-02" }} | {{ .Params.author }}</p>
{{ if and (.Params.summary) (ne (.Params.summary | plainify | trim " \n\r\t") "") }}
<p class="summary">{{ .Params.summary }}</p>
{{ else }}
<p class="summary">{{ .Summary | default "(抜粋がありません)" }}</p>
{{ end }}
<div class="meta-wrapper">
{{ with .Params.categories }}
<p class="post-meta">カテゴリ:
{{ range . }}<span class="tag">{{ . }}</span>{{ end }}
</p>
{{ end }}
{{ with .Params.tags }}
<p class="post-meta">タグ:
{{ range . }}<span class="tag">#{{ . }}</span>{{ end }}
</p>
{{ end }}
</div>
</article>
次にページ移動ボタンを表示させる場所に、以下を記述。 これで、最初、ページ番号、次へのリンクボタンが出現します。
<!-- ✅ ページネーションナビ -->
{{ if gt $paginator.TotalPages 1 }}
<nav class="pagination">
{{ with $paginator.First }}
<a class="page-link" href="{{ .URL }}">« 最初</a>
{{ end }}
{{ range $paginator.Pagers }}
<a class="page-number {{ if eq . $paginator }}active{{ end }}" href="{{ .URL }}">{{ .PageNumber }}</a>
{{ end }}
{{ with $paginator.Next }}
<a class="page-link" href="{{ .URL }}">次へ »</a>
{{ end }}
</nav>
{{ end }}
装飾などはCSSを記述する事でカスタム可能です。
実際の動作画面は、このブログのトップページの最新記事の下を見ると確認できます。
最後に
異常簡単ですが、Hugoのページネーション機能を使った比較的難易度の低いページ推移機能の紹介でした。
Hugoのバージョンにより記述方法が異なったり、上手く動かない場合があるので、詳しくは公式サイトを見られた方が良いかもしれません。
ちなみに、私の方はAI聞きながら実装したので、ChatGPTに聞くのもありだと思います。
💬 コメント