« Antinnyに感染 | メイン | ITRONプログラミング入門を読んで »

2006年11月24日

MTPaginateプラグインを導入

2年近くブログを続けていると、さすがにエントリ数も1000を超えます。そこで問題になってくるのが、アーカイブページ。月別なら1ページあたりに限度がありますが、カテゴリ別だと際限なしに増えていきます。以前、外部ネットワークから自分のブログのアーカイブを見たときに、読み込みの嵐になったので、何とかしなくては、と思ってきたのですが…

そこでようやくMTPaginateプラグインを導入です。多くのブログで導入報告がされており、定番のようです。とりあえず、カテゴリページを分割することにしました。作業としては、次の通り(MTのバージョンは3.31-ja)。主に参考にさせていただいた記事は、カテゴリーアーカイブと月別アーカイブのページ分割@小粋空間です。

<MTPaginate>
<MTPaginateIfMultiplePages>
<MTPaginateIfLastPage_>
<a href="<$MTPaginatePreviousPageLink$>">←</a>
</MTPaginateIfLastPage_>
<MTPaginateIfFirstPage_>
<a href="<$MTPaginateNextPageLink$>">→</a>
</MTPaginateIfFirstPage_>
<MTPaginateIfMiddlePage_>
<a href="<$MTPaginatePreviousPageLink$>">←</a>
<a href="<$MTPaginateNextPageLink$>">→</a>
</MTPaginateIfMiddlePage_>
<$MTPaginateNavigator format_all="ALL page" place_all="after" separator=" | ">
</MTPaginateIfMultiplePages>
<MTPaginateContent max_sections="10">
<$MTPaginateSectionBreak$>
</MTPaginateContent>
<MTPaginateIfMultiplePages>
<MTPaginateIfLastPage_>
<a href="<$MTPaginatePreviousPageLink$>">←</a>
</MTPaginateIfLastPage_>
<MTPaginateIfFirstPage_>
<a href="<$MTPaginateNextPageLink$>">→</a>
</MTPaginateIfFirstPage_>
<MTPaginateIfMiddlePage_>
<a href="<$MTPaginatePreviousPageLink$>">←</a>
<a href="<$MTPaginateNextPageLink$>">→</a>
</MTPaginateIfMiddlePage_>
<$MTPaginateNavigator format_all="ALL page" placement_all="after" separator=" | ">
</MTPaginateIfMultiplePages>
</MTPaginate>

以上の流れで、MTPaginateプラグインの導入は完了です。成功すれば、cat_1.phpを実行すると、ページ分割して表示します。ちなみにページ分割の仕組みですが、既存のアーカイブHTMLにphpを挿入し、1ページ単位のエントリ数ごとに、if節を設定します。これにより、phpが必要なページ部分のHTMLのみを返すようになっています。そのため、閲覧は軽くなりますが、投稿は効果ありません。

ところが、これで終わりと思ったらぬか喜び。うちの環境だと文字化けが発生しました。

それは、MTの文字コードがUTF-8であるのに対し、うちのphp環境が、default_charset、mbstring.internal_encoding、mbstring.httpoutputがいずれもEUCになっていたためです。phpを使って動いているシステムはそれなりにあるので、おいそれと変えるわけにもいきません。

悶々と悩んでいたところ、PHP5.0/3.php.iniの編集@Ground SunLightの記事を発見です。どうやら、.htaccessにより、先に挙げた3つの値を設定できるようです。そこで、MTのアーカイブがあるディレクトリに、下記の.htaccessファイルを置きました。

<IfModule mod_php4.c>
php_value default_charset "UTF-8"
php_value mbstring.http_output "UTF-8"
php_value mbstring.internal_encoding "UTF-8"
</IfModule>

これでバッチリ動くようになりました。なお、リンク先には「php5.0」とありましたが、当方のphp4.3.6環境でも問題ありませんでした。

投稿者 bokupi : 2006年11月24日 16:33

トラックバック

このエントリーのトラックバックURL:
http://omoshiro-joho.com/c-i-mnet/cgi-bin/mt/mt-tb.cgi/1217

コメント

コメントしてください




保存しますか?