以下のようにするのかなと思っていますが、正しいのでしょうか?
やりたいことは、
・キャッシュを有効にする(//1)
・キャッシュがあったら、DBへの接続も、処理もしない。IDごとにキャッシュを分ける(//2)
・時間ごとにキャッシュを作り直しモードにする?(//3)
・キャッシュの有効時間を5分にする(//4)
・出力する(//5)
$smarty->caching = true;//1
if(!$smarty->is_cached("xxxxx.tmpl", $id)){//2
//DBからデータを取得
//取得したデータをテンプレートに渡す
$smarty->caching = 2;//3
$smarty->cache_lifetime = 300;//4
}
$smarty->display("xxxxx.tmpl");//5
上記のような流れのつもりなのですが、いまいちこれでいいのかわかりません。
//2のif文を入れなくても、正常に動いているようにも見えるのですが、
それがないと、構文としては毎回DBへのアクセスがあるような気もしています。
3は不要、4は1と同時(1の前か後、どちらでも)に移してください。
あとは、キャッシュディレクトリの下にキャッシュファイルができますので、それができるかを確認しながら動かしてみてください。キャッシュファイルを手で削除すれば、強制的にif文の中を走らせてみることもできます。
キャッシュファイルがあり、ifの中が走らない場合の確認をされたいときは、ファイルに何か書きだすとか、データベースのログファイルを見てアクセスの無いことを確認してください。
これで如何でしょうか?
下記の環境でテスト済みです。
CentOS4.5
PHP 4.4.7
Smarty 2.6.12
※3は無くても正常に動作します
phpコード
<?php require_once("Smarty.class.php"); $smarty = new Smarty; $smarty->caching = true; //1 $smarty->caching = 2; //3 $smarty->cache_lifetime = 10; //4 $id = "Sample_Template"; if(!$smarty->is_cached("sample.tmpl", $id)){//2 /* キャッシュが無い場合の処理(現在の設定では10秒に1回) */ $message = "時刻 => ".date("Y-m-d H:i:s"); }else{ /* この文字列が現れる場合はSmartyのキャッシュです */ echo "これはキャッシュです"; } $smarty->assign("message",$message); $smarty->display("sample.tmpl",$id); //5 ?>
sample.tmpl
<html> <body> <p>{$message}</p> </body> </html>
大変詳しいコードありがとうございます。
後ほど、ためしみたいと思います。
本当にありがとうございます。
ありがとうございます。
試してみます。