タグ追加ごとに、タグ一覧ページの作成が必要

新規タグ追加毎にタグ一覧ページを作成しないといけないのは、管理が煩雑となり、ミスも多くなります。

タグ毎に異なる内容のページを用意する必要がないのであれば、ひな形から自動作成するのが便利です。

👉 Eleventyには、1つのテンプレートにより、複数ページを自動生成するページング機能が標準で存在します。


Eleventyのページング(Pagination)とは、

👉 配列データを分割して複数ページを自動生成する機能です。

例えば:

  • ブログ記事一覧を10件ずつ表示
  • タグごとの記事一覧ページを作る

といった用途で使われます。

なぜページングが必要?

もしページングを使わないで一覧ページを作成した場合…

  • 記事が100件 → 1ページに全部表示
  • ページが長くなりすぎる
  • 表示が重くなる
  • UXが悪化

👉 本来、こういった事を解決する為のものがページング機能です。


基本的な仕組み

Eleventyでは、テンプレートのフロントマターに pagination を書くだけです。

---
pagination:
  data: collections.posts
  size: 10
---

意味はこうです👇

項目 内容
data 分割対象のデータ
size 1ページに表示する件数


実際の使用例

投稿記事の一覧表を1ページ5件でページ分割する場合...

.eleventy.jsに記事コレクションを用意します。

module.exports = function (eleventyConfig) {
              :
  eleventyConfig.addCollection("posts", function(collectionApi) {
    return collectionApi.getFilteredByGlob("./src/posts/*.md");
  });};

記事一覧ページを作ります。

---
pagination:
  data: collections.posts
  size: 5
  alias: posts
permalink: "/posts/page/{{ pagination.pageNumber + 1 }}/"
---

<h1>記事一覧</h1>

<ul>
{% for post in posts %}
  <li>
    <a href="{{ post.url }}">{{ post.data.title }}</a>
  </li>
{% endfor %}
</ul>
<nav>
  {% if pagination.href.previous %}
    <a href="{{ pagination.href.previous }}">前へ</a>
  {% endif %}

  {% if pagination.href.next %}
    <a href="{{ pagination.href.next }}">次へ</a>
  {% endif %}
</nav>

生成されるページ

例えば記事が12件あって size: 5 の場合:

ページ 内容
/posts/page/1/ 1〜5件
/posts/page/2/ 6〜10件
/posts/page/3/ 11〜12件

👉 自動でページが増えます


よく使うオプション

  • alias(超重要)
alias: posts

👉 pagination.data のデータをテンプレート内で扱いやすくする

  • permalink
permalink: "/posts/page/{{ pagination.pageNumber + 1 }}/"

👉 URL構造を自由に決められる

  • reverse(新着順)
pagination:
  data: collections.posts
  size: 5
  reverse: true

👉 新しい記事を先頭に


タグ別ページング(実務でよく使う)

タグごとのページを作る例👇

---
pagination:
  data: collections.tagList
  size: 1
  alias: tag
permalink: "/tags/{{ tag }}/index.html"
---
<h1>{{ tag }}</h1>

<ul>
{% for post in collections[tag] %}
  <li>{{ post.data.title }}</li>
{% endfor %}
</ul>

👉 下記のようなページが自動生成される

  • /tags/はじめて/index.html
  • /tags/2回目/index.html
  • /tags/JavaScript/index.html

初心者がハマるポイント

  • aliasを忘れる

👉 テンプレートで扱えなくなる

  • permalinkを書かない

👉 URLが意図しない形になる

  • dataの指定ミス
    • data: collections.post ← ❌
    • data: collections.posts ← ✅

実務での使いどころ

ページングはほぼ必須です👇

  • ブログ一覧
  • カテゴリ一覧
  • タグ一覧
  • 商品一覧

👉 「一覧ページ=ページング」くらい重要


まとめ

  • ページングは「配列を分割してページ生成する機能」
  • フロントマターに書くだけで使える
  • alias と permalink が重要
  • タグページにも応用できる

おまけ(理解のコツ)

最初はこう考えると分かりやすいです。👇

👉 「for文をページ単位に分割したもの」