Metalsmith のページネーションは機能不足
現在、ブログ構築がストップしているのですが、その原因として、Metalsmith のページネーション系プラグインの機能が足りず、十分なサポートが得られていないという点があります。
metalsmith-collection プラグイン
このプラグインは、記事の集合( Wordpress 的な言い方をすると、アーカイブと同じようなものを作れます。以下ではコレクション)を作るためのものです。コレクションを作った時点で、next
と previous
というメタデータが追加され、「次の記事」「前の記事」のリンクを作ることができます。
コレクションには、記事を並べる順序を指定できます。普通は date
メタデータで逆順(新しいもの順)にソートすることが多いでしょう。場合によっては、古いもの順にソートしたいこともあるでしょう。現在の metalsmith-collection では、複数のコレクションを作ることはできるのですが、新しいものと古いもののコレクションの両方を作ると、next
と previous
は上書きされて壊れます。
例を示します。today.html
と yesterday.html
の 2つの投稿があったとします。最初に、新しいもの順にソートします。新しいもの順に並べると、today.html
は以下のような next
を持つことになります。
"today.html": { pagination: { next: { /* → yesterday.html */ } } }
この状態で、古いもの順にソートします。today.html
は、以下のようになります。
"today.html": { pagination: { next: { /* → yesterday.html */ } previous: { /* → yesterday.html */ } } }
同じオブジェクトを使い回して、next
は残ったまま、previous
が追加されますので、変なナビゲーションができあがります。
metalsmith-pagination プラグイン
このプラグインは、metalsmith-collection で作ったコレクションを実際にページ単位に分割して、ページネーションを実現します。このプラグインで作れるページネーションは、こういうものです。
(おそらく多くの人が)作りたいものは、こういうものでしょう。
何が足りないかは、お分かりでしょう。Handlebars.js と相性が悪いのが原因という点もあるのですが、ちゃんと考えて作ってよ、と言いたくなります。
metalsmith-tags プラグイン
さらに話をややこしくしているのは、metalsmith-tags で作ったタグページのページネーションは、metalsmith-tags が独自に行うという点です。使う側としては別段どこでやってもらっても構わないのですが、同じテンプレートを使い回せないと面倒です。
で、どうすんの?
不満ばかり書きましたが、「このブログではできてんじゃん」ということですね。はい。そうです。