top

ダイナミック・パブリッシングで頁分割(9) archives.html編(改2)(4.1、4.2)

ダイナミック・パブリッシングで頁分割(6) archives.html編(改)をMTタグだけで行えるようにした改訂版です。4.1からはopモディファイアが、また4.2からはダイナミックでも__counter__変数が使えるようになったため、プラグインなしでも同じことが出来るようになりました。また、4.2ではarchives.htmlテンプレートが少し変更され、初期状態では全記事一覧が出なくなったため、4.2でもarchives.htmlに全記事一覧を出す方法も併せて書いています。

■archives.htmlに全記事一覧を出す
4.1ならそのままでいいんですが、4.2の場合は以下の箇所をarchives.htmlから探し出して、前後の<mt:Ignore>を削除します。

<mt:Ignore>
<!-- List of entry archives, if entry archives are enabled -->
<mt:IfArchiveTypeEnabled archive_type="Individual">
   ・・・・
   省略
   ・・・・
</mt:IfArchiveTypeEnabled>
</mt:Ignore>

■全記事一覧を記事単位でページ分割する
さてこれで全記事一覧が出てくるようになって使いやすくなりましたが、このままでは記事数が多くなってくると頁表示にも負担がかかって大変です。何百件、数千件を一度に表示するのは効率的とはいえないので、分割表示して、一覧ならではの見やすさを保ったまま頁表示の負担を軽くしてみましょう。

●<MTArchiveList archive_type="Individual">のまま分割する
ArchiveListにはMTデフォルトのページ分割は使えないので、Smartyを使います。全記事一覧を以下のように書き換えます。赤字の部分で1頁に表示する記事数を決めます。2か所とも同じ数字にします。

<div class="archive-individual archive-date-based archive">
<div class="archive-content">
{{assign var="epp" value=50}}
<ul>
<MTArchiveList archive_type="Individual" lastn="50" offset="`$smarty.request.offset`">
<li><$MTArchiveDate format="%Y.%m.%d"$>: <a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
</MTArchiveList>
</ul>
</div>
</div>

分割コードは以下から好きなバリエーションを。
ダイナミック・パブリッシングで頁分割(1)
ダイナミック・パブリッシングで頁分割(4) バリエーション編
冒頭の部分は以下のようにして下さい。

{{capture assign="count"}}<$MTBlogEntryCount$>{{/capture}}

●ArchiveListをMTEntriesに変える
全記事を単純に分割するだけならMTEntriesも使えます。4.2の場合はこちらの頁を、4.1の場合はこちらの頁を参考にして下さい。

■本題:全記事一覧を月単位でページ分割する
MT4.1以降のバージョンで「archives.htmlの全記事一覧を月毎に区切られた一覧リストにし、かつ頁分割を行う」ための方法です。
これまでのarchives.html編と一部内容が重複しているところがありますが、4.1、4.2用版ということで、あらたにエントリー書き起こしています。

1.1頁に表示させる月数の設定
アーカイブリストの<MTArchiveList archive_type="Individual">~</MTArchiveList>の部分を以下のように書き換えます。
以下の例ではMT4デフォルトに合わせていますので、必要に応じてカスタマイズや好みのマークアップをして下さい。

<div class="archive-individual archive-date-based archive">
<div class="archive-content">
{{assign var="epp" value=6}}
<MTArchiveList archive_type="Monthly" lastn="6" offset="`$smarty.request.offset`">
<$MTArchiveTitle$> (<$MTArchiveCount$>)
<ul class="archive-list">
<MTEntries>
<li class="archive-list-item"><$MTEntryDate format="%Y.%m.%d"$>: <a href="<$MTEntryPermalink valid_html="1"$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</MTArchiveList>
</div>
</div>

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

【応用】<$MTArchiveTitle$>を<a href="<$MTArchiveLink$>"></a>で囲むと月別アーカイブへのリンクも同時に出来ます。

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

<!-- 頁分割ここから -->
{{capture assign="count"}}<MTArchiveList archive_type="Monthly"><MTArchiveListFooter><$MTVar name="__counter__"$></MTArchiveListFooter></MTArchiveList>{{/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}}の部分は一行で一気に続けて下さい。改行しないように。
4.1は赤字の部分を以下の内容と差し替えて下さい(4.1では_counter__変数が動作しないのでopモディファイアで代用します)。

<MTSetvar name="monthlycount" value="0"><MTArchiveList archive_type="Monthly"><MTSetVar name="monthlycount" op="++"><MTArchiveListFooter><MTGetvar name="monthlycount"></MTArchiveListFooter></MTArchiveList>

{{if $count > $epp}}以下の部分は分割バリエーションから好きなものを選んで差し替えることもできますので、いろいろ試してみて下さい。