時間のある時に少しずつ試していた分割サンプルのバリエーションがたまってきたので覚え書き。いずれも元のコードを自分の分かる範囲で書き換えてみただけのものなので、基本は同じです。
1.1頁に表示させる件数の設定
<MTEntries>を以下のように書き換えます。
{{assign var="epp" value=5}}
<MTEntries lastn="5" offset="`$smarty.request.offset`">
赤字の数字の部分で1頁に表示する件数を決めます。2か所とも同じ数字にして下さい。
2.分割用のコード
以下の分割コードを表示させたいところに追加します。</MTEntries>の下辺りでいいかと。
赤字の部分をテンプレートによって変更して下さい。
<$MTArchiveCount$> … 月別頁用
<$MTCategoryCount$> … カテゴリー頁用
<$MTBlogEntryCount$> … トップ頁・アーカイブ頁用(全エントリー数)
*赤字の部分は任意の数字にして一定件数のみ分割させるということも出来ます。
■前の○件・次の○件
シンプルな頁送り。○の部分には1で設定した数字が入ります。
表示見本:« < 前の5件 | 次の5件 > »
{{capture assign="count"}}<$MTBlogEntryCount$>{{/capture}} {{if $count > $epp}}
{{if $smarty.request.offset > 0}}
<a href="?offset=0">«</a>
<a href="?offset={{$smarty.request.offset-$epp}}">< 前の{{$epp}}件</a>
{{else}}
« < 前の{{$epp}}件
{{/if}}
|
{{if $smarty.request.offset < $count-$epp}}
<a href="?offset={{$smarty.request.offset+$epp}}">次の{{$epp}}件 ></a>
<a href="?offset={{math equation="floor((x-1)/y)*y" x=$count y=$epp}}">»</a>
{{else}}
次の{{$epp}}件 > »
{{/if}}
{{/if}}
■今の頁/全頁
分割された全頁分の現在見ている頁、という感じで表示されます。/の左の数字が今の頁、右側が全部で何頁分あるのかという表示になります。Serene Bachなどでよく見かける表示方法です。
表示見本:« < 1/5 > »
{{capture assign="count"}}<$MTBlogEntryCount$>{{/capture}} {{if $count > $epp}}
{{if $smarty.request.offset > 0}}
<a href="?offset=0">«</a>
<a href="?offset={{$smarty.request.offset-$epp}}"><</a>
{{else}}
« <
{{/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}}{{/if}}{{/section}}/{{math equation="floor((x-1)/y+1)" x=$count y=$epp}}
{{if $smarty.request.offset < $count-$epp}}
<a href="?offset={{$smarty.request.offset+$epp}}">></a>
<a href="?offset={{math equation="floor((x-1)/y)*y" x=$count y=$epp}}">»</a>
{{else}}
> »
{{/if}}
{{/if}}
■プルダウン
プルダウンによる表示です。widget-managerにある月別プルダウンをそのまま応用させてもらいました。
表示見本:
*↑上の見本からは飛びませんのでご注意下さい。
{{capture assign="count"}}<$MTBlogEntryCount$>{{/capture}} {{if $count > $epp}}
<select onchange="nav(this)">
{{math equation="(x-1)/y+1" x=$count y=$epp assign="numloop"}}
{{section name=npage loop=$numloop}}
<option value="?offset={{$smarty.section.npage.index*$epp}}"
{{if $smarty.request.offset+1 < ($smarty.section.npage.index+1)*$epp &&
$smarty.request.offset+1 > $smarty.section.npage.index*$epp }}
selected="{{$smarty.section.npage.index+1}}"{{/if}}>
{{$smarty.section.npage.index+1}}</option>
{{/section}}
</select>
{{/if}}
<script type="text/javascript" charset="<$MTPublishCharset$>">
function nav(sel) {
if (sel.selectedIndex == -1) return;
var opt = sel.options[sel.selectedIndex];
if (opt && opt.value)
location.href = opt.value;
}
</script>
もっと勉強してより複雑なバリエーションを考えられるようになりたいと思います。
<2007.8.2 4.0に対応>対応箇所・理由はこちらを参照
コメント
oscar | 2007年1月 4日 19:13
場所が違うので、きちんと。
TAEKOさん、明けましておめでとうございます。
Smartyって、あんまり使ったことなかってんですが、なるほどです。そういえばSmartyを拡張するプラグインも見かけた覚えがあります。
ダイナミック・パブリッシングの先輩として、いろいろ教えてくださいね。
今年もよろしくお願いいたします。
TAEKO | 2007年1月 5日 00:40
あけましておめでとうございます。^^
ダイナミックはMTに装備された時から使い始めたので、もう2年以上の付き合いになりますね。それでもダイナミックがSmartyだと知ったのはここ1年くらいのことなんです。おかげでダイナミックで出来ることが広がって、ちょっとしたカルチャーショックみたいな気分でしたよ(笑)。
これからはダイナミックのためにもSmartyをもっと勉強していかねばなあと思ってます。
こちらこそ、今年もよろしくお願い致します。