を参考に・・・要するにPHPなんだからスクリプト書けばページ分割ぐらいすぐですよ。という話ですが、ただ、キャッシュ機能までONにしてしまうとキャッシュされてしまうため、ページの動的分割がうまくいかない。そこで回避方法。
を参考に・・・要するに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}}">««より過去のページ </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 }}">より最近のページ» » </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