July 31, 2010

Movable Type 5: アーカイブページの分割方法

わたし、ver.2か3の頃に作ったMovable Typeのテンプレートを引きずったまま使っていたので知らなかったのですが、ver.4の頃からカテゴリーや月別のアーカイブファイルはhtmlファイルで書き出す設定にしていると、初期設定で設定しているエントリー数以上は表示されなくなっているのですよ。つまり、数百件のエントリーがあるカテゴリーでも、5件と設定していたら残りは見えない。見るためには検索するか月別アーカイブからたどるしかない。

それをページ分割して次のページへと見れるようにしてやるにはphpで吐き出すようにしないといけないのですが、古いタイプの人間なのか、どうも動的にページ作成するというのはビビる。サーバーの容量もまだ余裕があるので、静的なhtmlで運用したいので、それなら何か方法を考えなくてはなりません。で、検索すると発見したのが、PageButeというプラグインです。これなら静的ページを分割してくれます。

早速導入したところ、月別ページの分割は全くトラブルなしでページ分割されたのですが、カテゴリーアーカイブの分割がうまくいかない。最初はエントリーが空のページが生成される有り様でした。原因は分岐処理を掛ける"MTelse"というタグで、サブカテゴリーを持てるカテゴリーというアーカイブが上手く動かなかった様子。色々調べて、最終的にたどり着いたテンプレートの書き方がこれです。デザイン > テンプレート > アーカイブテンプレート一覧 > ブログ記事リストの35行目辺り。

<mt:if name="datebased_archive">
<MTPageContents count="10">
<mt:entries>
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
<$MTPageSeparator$>
</mt:entries>
</MTPageContents>
<mt:else>
<MTPageContents count="10">
<mt:entries lastn="0">
<mt:entryTrackbackData />
<mt:include module="ブログ記事の概要" />
<$MTPageSeparator$>
</mt:entries>
</MTPageContents>
</mt:if>

赤字が追加したタグ、青字が今回のキモになるポイントでした。
まず、mt:else後にもう一回MTPageContentsタグを入れてやる事で、カテゴリーアーカイブが空で出力されるのが回避出来ます。ただ、これだけだとエントリーの数が規定数(ここでは10)に達していないカテゴリーがやっぱり空になってしまうので、それを青字のところのlastnを0に指定してやることで回避しています。

今回、久しぶりにSQLやらMovable Typeやらテンプレートやらタグやら、色々触りました。最近は検索が強力なのですぐにある程度の問題解決は出来るのですが、完全に自分の症状と一致するケースはまれなので、トライ&エラーの繰り返しでしたよ。なかなか楽しかったですが、熱中しちゃって寝不足になるのが困ったところですね。

今回参考にさせてもらったページ。
静的ページ用ページ分割プラグイン:PageBute | スカイアークシステム
静的ページのままでもページ分割できる! - それだよ。
小粋空間: Movable Type 4 のカテゴリーアーカイブで全てのブログ記事を表示する

トラックバックURL

このエントリーのトラックバックURL:
http://little-bird.org/cgi-bin/MT/mt-tb.cgi/2955

コメント(1)

ありがとうございました!ありがとうございました!ありがとうございました!ありがとうございました!
救世主。
私の場合は、カテゴリーアーカイブだけナビゲーションが反映せず。(私の場合は下にビフォーアフターで入れました)ほかのアーカイブは問題ないのに。もう悩んで悩んで悩んで。検索してもこれといった情報なくて、みんな平気なの?と悩みました。ここのおかげで救われました。
ありがとうございました!!!!

コメントする