第22回:カテゴリーアーカイブをページ分割する
第21回では、トラックバックURLを簡単にコピーできるようにする方法を説明しました。今回は、1ページが長くなりがちなカテゴリーアーカイブページや月別アーカイブページを複数のページに分割する方法について説明します。
月別アーカイブならば、1ページに表示されるエントリー数に限りがありますが、カテゴリーページの場合は、ページ分割しないと徐々にエントリー数が肥大化し、ページの表示が徐々に重くなっていきます。これを解決するために、MTPaginate という、ページ分割するためのプラグインを利用して、長くなったページを複数のページに分割します。
■このエントリーで参考にした記事:
ブログ簡単パワーアップ Movable Type スーパーカスタマイズテクニック
小粋空間:「カテゴリーアーカイブと月別アーカイブのページ分割」
まず、以下のサイトより MTPaginate.zip をダウンロードしてきてください。解凍すると、MTPaginate.pl が入っているので、plugins ディレクトリにコピーしてインストールは完了です。
⇒http://www.nonplus.net/software/mt/MTPaginate.htm
以下図が、完成形の画像です。
■メインページのページ分割
まず、メインページ(トップページ)をページ分割します。「テンプレート」→「メインページ」を開いて、以下ソースを参考に編集してください。青文字が新たに追記する箇所です。オレンジの部分は、各自でカスタマイズできます。それぞれのタグの意味については後述します。
<MTPaginateContent max_sections="20">
<MTEntries lastn="200">
・・・
・・・省略
・・・
<$MTPaginateSectionBreak$>
</MTEntries>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<MTPaginateIfFirstPage_>
<$MTPaginateNavigator format_current="%d"$>
| <a href="<$MTPaginateNextPageLink$>"> 次のページへ &gt;&gt;</a>
</MTPaginateIfFirstPage_>
<MTPaginateIfMiddlePage_>
<a href="<$MTPaginatePreviousPageLink$>">&lt;&lt; 前のページへ </a>
| <$MTPaginateNavigator format_current="%d"$> |
<a href="<$MTPaginateNextPageLink$>"> 次のページへ &gt;&gt;</a>
</MTPaginateIfMiddlePage_>
<MTPaginateIfLastPage_>
<a href="<$MTPaginatePreviousPageLink$>">&lt;&lt; 前のページへ </a>
| <$MTPaginateNavigator format_current="%d"$>
</MTPaginateIfLastPage_>
</MTPaginateIfMultiplePages>
</MTPaginate>
まず、<MTEntries>~</MTEntries>を<MTPaginate>~</MTPaginate>で挟みます。
次に、MTPaginateContentタグの max_sections 属性で1ページに表示する件数を指定します。ここでは、max_sections で「件数」を指定していますが、max_bytes で「バイト数」ごとに、max_words で「単語」ごとにページを分割します。
MTPaginateIfFirstPageタグで、最初のページでの表示方法、MTPaginateIfMiddlePageタグで、2ページ目以降の表示方法、MTPaginateIfLastPage は、最後のページでの表示方法指定します。その3つのタグを<MTPaginateIfMultiplePages>~</MTPaginateIfMultiplePages> で囲みます。
MTPaginatePreviousPageLinkタグは、前のページへのリンクを、MTPaginateNextPageLinkタグは、次のページへのリンクを挿入します。
<$MTPaginateNavigator format_current="%d"$> の箇所は、ページ番号の表示方法を指定します。ここでは、 format_current="%d"属性を指定しており、"1 | 2 | 3 | 4"のように表示されます。
また、<$MTPaginateNavigator style="popup"$> と指定した場合は、記事番号がプルダウンメニューで表示されます。その他にもたくさんの属性があるので、詳しくは、http://www.nonplus.net/software/mt/MTPaginate.htm を参照してください。
<MTEntries lastn="200">では、何件までページ分割するかを指定します。仮に、1000件のエントリーがあったとしても、 lastn="200"では、200件目までしか分割されないので、max_sections="20"と指定した場合は、最大でも、10分割(1 | 2 | ~ | 10)までしか分割されません。なお、lastn 属性を指定しなければ、1000件に達するまでページ分割されます。
(最大表示件数200件[ lastn] = 1ページの表示件数20[ max_sections ] X 10分割)
以上、メインページでの分割方法を簡単に説明してきましたが、カテゴリーアーカイブでも月別アーカイブでも、分割方法は変わらないので各自でテンプレートを編集してページ分割してみてください。
以上、第22回は終了です。
合わせて、第38回:同一ページで複数のページ分割を用いる も参照しておいてください。