Blogger Labo:【自作テンプレート補足】番号付きページャとアーカイブの相性について

当サイトの自作テンプレートの仕様について、コメント欄で「アーカイブページでページャを使うとリンク先がおかしくなる」とのご指摘をいただきました。この件について色々と試してみたので、その結果をここに書き残しておこうと思います。


概要


番号付きページャの仕様について


20/09/11現在、当サイトの自作テンプレートには番号付きページャを採用しています。このページャは標準のページャをJavaScriptで番号付きのものに置き換えるというもので「Mr Blogger Tricks(英語サイト)」さんからお借りしたものです。この番号付きページャは個別記事ページ(item)と固定ページ(static)以外で表示されるという条件分岐になっています。

指摘されたアーカイブの不具合について


指摘された不具合は、ブログアーカイブからリンクを表示させた際にページャでページ送りをすると指定された範囲の記事リストではなく、全く別の記事リストが表示されてしまうというものです。不具合の原因は「番号付きページャが記事の表示件数を確定した場合でないと、うまく動作しない仕様になっている」ことで、当テンプレートではラベルリンクの表示件数を10件にするなど、この不具合の出そうな場所に対策をしています。

で、今回はブログアーカイブの表示件数を指定し忘れていたので、これを直せば正常に動くだろうと高をくくっていました。しかし、結果として、この不具合は現状では解決できていません。

試したこと


ブログアーカイブの記事リストに表示件数を指定した


最初に試したのは、ラベルページのように「max-resultで表示件数を指定した」ことです。で、この状態でアーカイブページを見ましたが、アドレスは「max-result」の指定になっているものの、表示される記事は元々の設定のまま、条件に見合った記事がずらっと羅列されました。つまり、ブログアーカイブの記事表示数は「max-result」でコントロールできないということです。

番号付きページャの除外条件にアーカイブページを指定した


次に試したのが「番号付きページャの非作動条件にアーカイブページを含めた」ということです。この状態で試してみると、最初のページはページャがデフォルトに戻るものの、2ページ以降は番号付きページャになってしまい、上手く行かないという結果になりました。

これは「アーカイブページ」はアーカイブリンクの最初のページを指すものであり、2ページ以降は「インデックスページ」というくくりになってしまうのが原因のようです。よって、この方法は使えないということがわかりました。

番号付きページャを削除する


最後に「番号付きページャのJS部分を全て削除」して、アーカイブページを見てみました。その結果、ページャはデフォルトのものになりますが、アーカイブページのリンクは正常に表示されるようになりました。この方法は「全てのページで番号付きページャ」が使えなくなるので、ある意味本末転倒のような方法になります。

不具合についての結論


番号付きページャを使うか、使わないかの2択


結論から言うと、今回の不具合の解消法は「番号付きページャを使うか、使わないかの2択になる」と考えられます。そもそも今回の不具合は「Bloggerのアーカイブページの仕様と番号付きページャの仕様が噛み合わなかったということ」が原因だと思われます。

ですので、公式の仕様通りに動かしたいならば「番号付きページャを削除する」、非公式でもユーザビリティを優先させたい場合は「アーカイブの不具合を諦めて、番号付きページャ」を使い続けるといった2択から方式を選択するしかなさそうです。

個人的には番号付きページャは必要だと思うので、自作テンプレートのデフォルトの仕様として残しておこうと思います。なぜなら、わざわざ個人ブログのアーカイブページから記事を参照しようとするユーザーは少ないと思うからです。で、どうしても気になるならアーカイブガジェットを削除すればこの問題は気にならなくなると思います(あくまで個人の意見です)。

番号付きページャを削除する方法


番号付きページャを削除するにはテーマから「HTMLを編集」を選択して以下の作業を行ってください。

・< !-- ページャを番号付きにするコードはじめ -->から< !-- ページャを番号付きにするコードおわり -->までのコードを削除する
・「記事リストの番号付きページャ」のCSSを削除する(任意)

番号付きページャは基本的に「番号付きページャのJavaScriptコード」を削除するだけで機能しなくなります。CSSはただの残骸となるだけなので残しておいても問題ありませんが、気持ち悪ければ消してください。