Movable Type 4.2でキャッシュ付きダイナミックパブリッシングでのページ分割

長いタイトルになってしまったが、
MT4.2のダイナミックパブリッシングでのページ分割の続き。

ダイナミックパブリッシングでのページ分割
http://www.movabletype.jp/documentation/designer/pagination.html
をやってPagerに対応したものの、ダイナミックパブリッシングのキャッシュがONになっていると2ページ目を表示しても1ページのキャッシュが表示されてしまうという問題があります。

つーわけで、cacheidにPagerを意識させてみた。

修正するのはmt/php/mt.php

ちなみにphp/lib/MTViewer.phpがsmartyの派生クラスで、こいつがmt/php/mt.phpから呼ばれる。

mt.phpの523行目あたりを見ると、MTクラスのviewメソッドにおいて、MTViewer、すなわちsmartyに渡すcacheidが次のようになっている。

$cache_id = $blog_id.’;’.$fi_path;
$fi_pathをつくるときにクエリストリングなどはきれいに除去されてしまっているので、ここにさらにlimitとoffsetを追加すればよい。

// 修正前
$cache_id = $blog_id.';'.$fi_path;
// 修正後
$cache_id = $blog_id.';'.$fi_path;
if (isset($_REQUEST['limit']) || isset($_REQUEST['offset'])) {
$cache_id .= ":".$_REQUEST['limit'].":".$_REQUEST['offset'];
}

たくさんページキャッシュができてしまうのが場合によっては問題。ファイルサイズの問題もあれば、ファイル数の問題もある。適当にキャッシュディレクトリを散らしたいところ。

しかし、ページキャッシュあると速いわ。なんか知らんがMT4に移行したときにページキャッシュがオフになってしまっていたので、なおさら速く感じる。