top

ダイナミック・パブリッシングで頁分割(1)

ダイナミックでは頁分割は出来ないものだと思い込んでいましたが、実は出来ることが判明しました!

invisible blog 分割でお願いします
買物ログ カテゴリー・アーカイブを分割しました

それによると、実はダイナミック・パブリッシングにはもともと頁分割機能があった!?
ええええええ!!(驚)

さっそく試してみました。これはダイナミック・パブリッシングに備わっている能力を利用して頁分割を行うものなので、プラグインも要りませんし、拡張子をphpにする必要もありません。htmlのまま、いとも簡単にサクッと動きます。これは凄いッッ!

以下は自分のための覚え書きです。

■月別アーカイブの頁分割
まずは<MTEntries>を以下の記述で置き換えます。

 {{assign var="epp" value=5}}
<MTEntries lastn="5" offset="`$smarty.request.offset`">

赤字の数字の部分で1頁に表示する件数を決めます。2か所とも同じ数字にして下さい。

次に、頁分割を表示させたい箇所に以下の記述を追加します。
これはinvisible blogのYuyaさんが分割でお願いしますで書かれていたスクリプトをちょっとだけアレンジしたものです(中身は分からないので、左右の矢印部分の記号を少し変えただけです^^;)。

<!-- 頁分割ここから -->
{{capture assign="count"}}<$MTArchiveCount$>{{/capture}} {{if $count > $epp}}
{{if $smarty.request.offset > 0}}
<a href="?offset=0">&laquo;</a>
<a href="?offset={{$smarty.request.offset-$epp}}">&lt;</a>
{{else}}
&laquo; &lt;
{{/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>
<a href="?offset={{math equation="floor((x-1)/y)*y" x=$count y=$epp}}">&raquo;</a>
{{else}}
&gt; &raquo;
{{/if}}


{{/if}}
<!-- 頁分割ここまで -->

表示見本 « < | 1 | 2 | 3 | 4 | > » 動作サンプル

青字の部分が両側の « <  > » にあたります。左右の矢印は要らない、数字だけ | 1 | 2 | 3 | 4 | な感じで表示されればいいという人は青字の部分を消せばOKです。

*その月のエントリー数が1頁に表示させる件数より少ない場合は分割リンクは表示されません。

■カテゴリーアーカイブの頁分割
<$MTArchiveCount$><$MTCategoryCount$>に変更。

■トップ頁の頁分割
<$MTArchiveCount$>50 など好きな数字に変更。
ここで決めた数のエントリーが分割されて表示されます。

なお、任意の数字ではなく<$MTBlogEntryCount$>にすると、全てのエントリーを分割して表示することができます。覚えておくと便利だと思います。

こんなに簡単に頁分割が出来るんだったら、月別頁復活させてもいいかなあ…。
素晴らしいスクリプトを書いて下さった方々に心より感謝致します。

お知らせ
MT4.2からはSmartyのコードを直接テンプレートに書かなくてもMTタグで頁分割が出来るようになりました。4.2以降をお使いの方はMTタグでの分割も行えます。詳しくはこちらをご覧下さい。(もちろん、この頁の分割方法は4.2でも問題なく使えます)

<注意事項>
●MT3.31をお使いの方へ
MT3.31には月別アーカイブの<$MTArchiveCount$>がダイナミックで正しく出力されないバグがあります。そのため、3.31で月別アーカイブをダイナミック分割する場合は、<$MTArchiveCount$>の部分を任意の数字(31など)に置き換えるか、こちらの方法で対処して下さい。

<2006.8.30 追記・修正>
<2007.8.2 4.0に対応>対応箇所・理由はこちらを参照
<2008.8.16 追記>4.2でダイナミックが公式に頁分割に対応したことを追記。