top

ダイナミック・パブリッシングで頁分割(6) archives.html編(改)(~4.0)

2021追記:
AutoIncrementalVarプラグインがダウンロード出来なくなっているので、プラグインを使わない方法をご参照下さい。

親カテゴリー編でダイナミック対応のプラグインを使って「子カテゴリーを含む親カテゴリーのエントリー数」を取得できたので、これまで静的用プラグインで対応してきた「投稿のある月の総数」もダイナミックで取得できるかどうか試してみたところ、成功しました。
これにより、静的プラグイン用に別ファイルを作らなくてもダイナミック頁内のみで全て対応出来るようになったので、archives.htmlも「完全ダイナミック版」へと乗り換えることができました。あんちもん2さん、ありがとうございます!

覚え書きを書くに当たって、過去の頁に差分を追記してもよかったのですが、記述がゴチャゴチャになりそうだったので、ここに「完全ダイナミック版」として新たにエントリーを作ることにしました。そのため一部内容が重複しているところもありますが、他の頁を見なくてもこのエントリー内だけで完結できるようになっていますので分かりやすいかと思います。なお、過去の頁もアプローチの一例として今後も残していきますので、必要に応じて参照していただければと思います。

■趣旨と目的
ここではarchives.htmlを月毎に区切られた一覧リストにし、かつ頁分割が行えるようにしています。
デフォルトのまま分割するにはこちら基本の分割方法をご覧下さい。

■分割方法

1.プラグインのセット
アーカイブリストを月単位で分割するには「投稿のある月の総数」が必要ですが、MTには「投稿のある月の総数」を取得できるタグはありません。それを取得するためにダイナミックにも対応しているAutoIncrementalVarプラグインを使います。
あんちもん2.LabからAutoIncrementalVar プラグインをダウンロードし、解凍して説明通りにMTにアップします。ダイナミックサイトでも静的用・動的用両方アップしておきましょう。

2.1頁に表示させる月数の設定
以下の例では3.3デフォルトに合わせていますので、必要に応じてカスタマイズして下さい。
アーカイブリストの<ul class="archive-list">~</ul>の部分を以下のように書き換えます。

{{assign var="epp" value=6}}
<MTArchiveList archive_type="Monthly" lastn="6" offset="`$smarty.request.offset`">
<strong><$MTArchiveTitle$></strong> (<$MTArchiveCount$>)
<ul class="archive-list" style="margin-bottom:10px;">
<MTEntries>
<li class="archive-list-item"><$MTEntryDate format="%Y.%m.%d"$>: <a href="<$MTEntryPermalink valid_html="1"$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</MTArchiveList>

赤字の数字の部分で1頁に表示したい月の数を決めます(2か所とも同じ数字にして下さい)。6だと6ヶ月毎(半年毎)に頁送りされるようになります。12にすると1年単位で頁送りできますね。その辺は記事数の溜まり具合に合わせて。

3.分割用コード
分割を表示させたい箇所に以下の分割コードを挿入。

<!-- 頁分割ここから -->
{{capture assign="count"}}<$MTSetVarAutoIncremental name="monthlyCount" value="0"$><MTArchiveList archive_type="Monthly"><$MTIncrementVar name="monthlyCount"></MTArchiveList><$MTGetVarWithoutIncrement name="monthlyCount"$>{{/capture}}
{{if $count > $epp}} 
{{if $smarty.request.offset > 0}}
<a href="?offset={{$smarty.request.offset-$epp}}">&lt;</a> 
{{/if}}
| 
 
{{math equation="(x-1)/y+1" x=$count y=$epp assign="numloop"}}
{{section name=npage loop=$numloop}}
{{if $smarty.request.offset+1 < ($smarty.section.npage.index+1)*$epp && 
 
$smarty.request.offset+1 > $smarty.section.npage.index*$epp }}
{{$smarty.section.npage.index+1}}
{{else}}
<a href="?offset={{$smarty.section.npage.index*$epp}}">
 
{{$smarty.section.npage.index+1}}</a>
{{/if}}
 
{{if $smarty.section.npage.last != 1}} |
{{/if}}
{{/section}}
| 
{{if $smarty.request.offset < $count-$epp}}
<a href="?offset={{$smarty.request.offset+$epp}}">&gt;</a> 
{{/if}}
 
{{/if}}
<!-- 頁分割ここまで -->

冒頭の{{capture assign="count"}}・・・赤字・・・{{/capture}}の部分は一行で一気に続けて下さい。改行しないように。
この例では前後頁へのリンク(矢印部分)はリンクが存在するときだけ出てくるようにしています。

*なお、{{if $count > $epp}}以下の部分は下記の分割バリエーションから好きなものを選んで差し替えることもできます。好みに応じて変えるのも面白いと思います。
ダイナミック・パブリッシングで頁分割(1)
ダイナミック・パブリッシングで頁分割(4) バリエーション編

<2007.8.2 4.0に対応>対応箇所・理由はこちらを参照