- February 5, 2007 12:00 PM
- MovableType
「子カテゴリのエントリーを含むアーカイブ」で中途半端だった、ダイナミックパブリッシングで子カテゴリーを含むアーカイブにページ送りを付ける方法ですが、「WingMemo」TAEKOさんの助言により可能になりました。
ただし、これはスタティック・追加カテゴリーテンプレート+スタティックプラグインという、あまりスマートとは言えない解決方法なので、出来ればこれからも方法の模索は続けたいと思います。
ただこれはこれで、なかなか面白い解決方法なのは確かで、ダイナミックパブリッシング時のテンプレートがどのように展開されていくかが理解できる事と思います。
子カテゴリーを含むエントリー数をSmarty変数にセット
どのようにしたかの説明です。 スタティックのプラグイン「Everitz Consulting: MT-SubCatCount」を使えば、エントリー数を得られるのですが、このプラグインはダイナミック・パブリッシングのテンプレート内では使えません。 今回はこのプラグインの出力を、工夫してダイナミックのテンプレートに読み込みます。 まずカテゴリーアーカイブ用のテンプレートを作成します。 テンプレートの中身は <$MTSubCatCount$> のみになります。タグの前後に余分なスペースや改行を入れないで下さい。余分なコードの混入は、予想もしない動作をさせる可能性があります。 このテンプレートはダイナミックにしてはいけません。 ブログの公開設定でこのテンプレートをカテゴリーアーカイブとして割り当てます。 読み込み時にファイル名が一意になるように設定してください。私はカテゴリーIDを使いましたが、人によっては BaseName などでも良いでしょう。私は catcnt<$MTCategoryID$>.txt というファイル名にしました。後はカテゴリーの再構築を行えば、エントリー数の書かれたテキストファイルが出来上がります。 実際にこれをカテゴリーテンプレートで読み込むのは、色んな方法がありますが、Smarty変数にセットする場合には{{capture name="mtcntname"}}<$MTBlogURL$>archives/catcnt<$MTCategoryID$>.txt{{/capture}}このようにする事で、mtcntnameにセットできます。
カテゴリーアーカイブのページ分割
ページ分割に関しては、「WingMemo: ダイナミック・パブリッシングで頁分割(4) バリエーション編」に詳しく書かれていますので、子カテゴリーを含むエントリー数でページ分割する部分だけ書きます。 上記サイトの説明でカテゴリー内のエントリー数をキャプチャする部分。{{capture assign="count"}}<$MTBlogEntryCount$>{{/capture}}この部分を以下のように書き換えます。
{{capture name="mtcntname"}}<$MTBlogURL$>archives/catcnt<$MTCategoryID$>.txt{{/capture}} {{capture assign="count"}}{{fetch file="`$smarty.capture.mtcntname`"}}{{/capture}}これで、カテゴリー分割が正しいエントリー数で行われます。
<MTEntriesWithSubCategories> を使った、子カテゴリーまで含むえんとりーの表示は、ちょうど、TAEKOさんが「WingMemo: 親カテゴリーに子カテゴリーの記事を表示させる」を書いて下さったようです。そちらをご覧下さい。ちなみに、私も最初categoryアトリビュートを指定しなくてはいけないというのが解って、試行錯誤した口です。
Smartyコード書いたら、インクルード時に評価されてしまった。気をつけねば。
テンプレート例を載せます。
<MTEntries>と</MTEntries>部分周辺を以下のように置き換えて下さい。
{{capture assign="thiscategory"}}<$MTCategoryLabel$>{{/capture}}
{{assign var="epp" value=5}}
<MTEntriesWithSubCategories lastn="$epp" offset="`$smarty.request.offset`" category="$thiscategory">
・
中略
・
</MTEntriesWithSubCategories>
{{capture name="mtcntname"}}<$MTBlogURL$>archives/catcnt<$MTCategoryID$>.txt{{/capture}}
{{capture assign="count"}}{{fetch file="`$smarty.capture.mtcntname`"}}{{/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}}
見た目をカスタマイズしたい場合は、「WingMemo」の当該エントリーを参考に行ってください。
- Newer: Firefox2.0:フィードプレビューをもっと賢く
- Older: ダイナミックパブリッシングへの道(5):知られているバグ
Powered by Ajax Comments & Comment Subscribe