MappingBasedArchiveのページ分割

先日公開したRealtimeRebuild(およびRebuildHelper/DivPages)プラグインの最新版を使って、MappingBasedArchiveプラグインで作ったパス別アーカイブをページ分割する方法を紹介します。

1.プラグインのインストール

まず、以下の各プラグインをインストールします。

2.リアルタイム再構築の許可

次に、ページ分割したいパス別アーカイブテンプレートを、リアルタイム再構築できるようにします。

対象のウェブサイト(またはブログ)で「ツール」→「プラグイン」メニューを選び、RealtimeRebuildプラグインの設定タブを開きます。
そして、「再構築を許可するテンプレート」の部分で、パス別アーカイブテンプレートのチェックをオンにして、設定を保存します。

3.ページ選択用のテンプレートモジュールの作成

分割後の各ページには、ページを選択する部分を設置します。
そのために、テンプレートモジュールを1つ作ります。

テンプレートモジュールの名前は、「ページ選択」にします。
また、テンプレートの内容として、以下を入力します。

<mt:DivPagesIfMulti>
<mt:SetVarBlock name="pager_link"><$mt:RealtimeRebuildLink tmpl_name="$tmpl_name" tmpl_type="archive" context="1"$>&mba_name=<$mt:GetVar name="mba_name" encode_url="1"$>&mba_sort=<$mt:GetVar name="mba_sort" encode_url="1"$></mt:SetVarBlock>
<form id="page_sel" name="page_sel" action="get">
<div style="text-align : center;">
<mt:DivPagesIfPrevPage>
<span class="label label-info"><a href="<$mt:Var name="page_link"$>">先頭</a></span>
<span class="label label-info"><a href="<mt:If tag="DivPagesPrevPageNumber" eq="1"><$mt:Var name="page_link"$><mt:Else><$mt:GetVar name="pager_link"$>&page=<$mt:DivPagesPrevPageNumber$></mt:If>">前</a></span>
</mt:DivPagesIfPrevPage>
<select name="page_num" onchange="if (this.value == 1) { location.href = '<$mt:Var name="page_link"$>'; } else { location.href = '<$mt:GetVar name="pager_link"$>&page=' + this.value; } return false;">
<mt:DivPagesLoop all="1">
  <option value="<$mt:DivPagesNumber$>"<mt:DivPagesIfCurPage> selected="selected"</mt:DivPagesIfCurPage>><$mt:DivPagesNumber$></option>
</mt:DivPagesLoop>
</select>/<$mt:DivPagesCount$>ページ

<mt:DivPagesIfNextPage>
<span class="label label-info"><a href="<$mt:GetVar name="pager_link"$>&page=<$mt:DivPagesNextPageNumber$>">次</a></span>
<span class="label label-info"><a href="<$mt:GetVar name="pager_link"$>&page=<$mt:DivPagesLastPageNumber$>">最後</a></span>
</mt:DivPagesIfNextPage>
</div>
</form>
</mt:DivPagesIfMulti>

4.MTEntriesタグの書き換え

ページ分割したいパス別アーカイブテンプレートで、MTEntriesタグを「MTEntriesDivPages」というタグに書き換えます。
このタグは、分割後の各ページに応じて、適切に記事を読み込む働きをします。

5.MTDivPagesInitタグの追加

次に、MTEntriesDivPagesタグの前に、以下のようなMTDivPagesInitタグを追加します。
「○○○」には、1ページあたりの記事の表示件数を指定します。

<$mt:DivPagesInit per_page="○○○"$>

6.初期化用のテンプレートタグの追加

MTDivPagesInitタグの前に、以下のように初期化用のテンプレートタグを追加します。

<$mt:ArchiveLink setvar="page_link"$>
<$mt:SetVar name="tmpl_name" value="テンプレート名"$>
<$mt:SetVar name="mba_name" value="アーカイブマッピング名"$>
<$mt:MappingBasedSortKey setvar="mba_sort"$>

「テンプレート名」の箇所は、ページ分割するパス別アーカイブテンプレートの名前に置き換えます。
「アーカイブマッピング名」の箇所は、パス別アーカイブの設定の際につけたアーカイブマッピングの名前に置き換えます。

アーカイブマッピングの名前の設定

7.ページ選択部分の出力

最後に、ページ選択の部分を出力します。
MTEntriesDivPagesタグのブロックの後に、以下のMTIncludeタグを入れます。

<$mt:Include module="ページ選択"$>