2007年0503日 

Movable TypeでPHPダイナミックパブリッシングとキャッシュとページ分割を同時に利用する方法

買い物ログ: カテゴリ・アーカイブをページ分割しました

 を参考に・・・要するにPHPなんだからスクリプト書けばページ分割ぐらいすぐですよ。という話ですが、ただ、キャッシュ機能までONにしてしまうとキャッシュされてしまうため、ページの動的分割がうまくいかない。そこで回避方法。

まずはページ分割

<MTEntries lastn="10" offset="`$smarty.request.page*10`">

 基本はMTEntries タグにlastnで1ページ当たりのエントリ数と、offsetで$smarty.request.pageでページの最初のエントリのオフセットを入力。
 今回は1ページ当たり10エントリとするので、lastnは10。オフセットでページ数を10倍する。

 基本的にはこれだけで、分割可能。(オリジナルソースとは若干変わってます)

ナビゲーション

<p> {{capture assign="count"}}<$MTCategoryCount$>{{/capture}}
{{if $smarty.request.page*10 < $count-10 }}
< a href="?page={{$smarty.request.page+1}}">&laquo;&laquo;より過去のページ </a>
{{if $smarty.request.page != 0 }} | {{/if}}
{{/if}}

{{if $smarty.request.page > 0}}
< a href="/">最新のページ</a>|
< a href="?page={{math equation="max(x-10,0)" x=$smarty.request.page }}">より最近のページ&raquo; &raquo; </a>
{{/if}}
< /p>


 お好みの位置にナビゲーションを置くのもオリジナルと同じです。オリジナルではoffsetとなっているところをpageに変えてあります。

 また、時系列を 右側を過去、左側を未来に変えてあります。

ページ分割はキャッシュしない

 さて、ここで困ってしまうのが、MTのキャッシュ機能をONにしていると、1ページ目がキャッシュされてしまうために2ページ以後は1ページ目が表示されてしまうという問題です。だからといって、キャッシュをOFFにしてしまうとRSSや他のページまでキャッシュされなくなってしまい動作が非常に重くなってしまいます。

 そこで、こういった?付きの本当に、本当な?動的ページのみキャッシュせず、RSSなど他のダイナミックページはキャッシュさせる事にしました。

 この対処は簡単で

<?php
$mt = new MT(2);
if(strpos($_SERVER['REQUEST_URI'],'?')===false){
$mt->caching = true;
}
$mt->view();
?>


 ダイナミックパブリッシングに使っているmtview.phpを修正します。

 修正はごく簡単な物で、$_SERVER['REQUEST_URI'],を使ってURL中に?が含まれていなければ、キャッシュする。含まれていればキャッシュしない。という単純なロジックに変更します。

 おおよその場合、これで、ページ分割など、スクリプトで分岐する物については本当に動的に、それ以外の物はキャッシュをする半動的という風に処理されます。

参考

 買い物ログ: カテゴリ・アーカイブをページ分割しました
 Don't Back Down: Pagination Using Smarty

関連するエントリ一覧

関連するタグ

その他










お知らせ

ロボットによるスパムが酷い記事の場合コメント欄が閉じている場合があります。ご了承下さい。(一時期数千件とかスパムが来たので。)

トラックバック

このエントリーのトラックバックURL:



» 【Movabletype】プラグインなしでページ分割【これはすごい】 from Katsuya Maguro Trickstar Web(痴女マニアックスちゃいますw)
余りに目ウロコというか効果絶大でした。 Movable TypeでPHPダイナミ... [続きを読む]

トラックバック時刻: 2007年05月03日 20:46

» 頁分割とキャッシュの両立 from WingMemo
当方のダイナミックではSmartyを用いた頁分割を行っています。が、この方法は「ページレベルのキャッシング」を有効にすると上手く動いてくれません。といって... [続きを読む]

トラックバック時刻: 2007年07月18日 17:16

» カテゴリーと月のアーカイブのページを分割した。 from バリごと。
カテゴリーと月別アーカイブ(←サイドバーに表示されている)のページを分割した。何... [続きを読む]

トラックバック時刻: 2007年07月18日 19:05

» Movable Type 4.2 にバージョンアップ from La Petite Note
Movable Type 4.2 がリリースされていることはわかっていたのだけど... [続きを読む]

トラックバック時刻: 2009年04月11日 01:56

コメント

コメント一覧

心は萌え(管理人)(--)『

お気軽にコメント下さい。ただし、基本的に読んではいますが、お返事はほとんどしません。お返事が必要な方はTOPページにあるメールアドレスへメールを送って下さい。

 

いちろう : 2007年07月14日 11:59『

1年ほど前、ダイナミックでキャッシュが使えない壁にぶち当たったのですが、これで解決です。とはいうものの、違う理由で、いまはスタティックで運用しています。レンタルサーバのMySQLの低性能さ加減と再構築時のタイムアウト(ダイナミックは記事数が増加してくるとタイムアウトエラーが頻発するようです。)

ご教授ありがとうございました。

 



コメントしてください




保存しますか?






このエントリーを含むはてなブックマーク

人気blogランキングこのサイトを投票
http://revilog.com/ TOPへ