smartyのキャッシュのことがいまいちわかりません。


以下のようにするのかなと思っていますが、正しいのでしょうか?
やりたいことは、
・キャッシュを有効にする(//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へのアクセスがあるような気もしています。

回答の条件
  • 1人2回まで
  • 登録:2007/11/19 15:05:39
  • 終了:2007/11/27 09:30:52

回答(2件)

id:guesthouse No.1

guesthouse回答回数51ベストアンサー獲得回数02007/11/19 16:16:53

ポイント35pt

3は不要、4は1と同時(1の前か後、どちらでも)に移してください。

あとは、キャッシュディレクトリの下にキャッシュファイルができますので、それができるかを確認しながら動かしてみてください。キャッシュファイルを手で削除すれば、強制的にif文の中を走らせてみることもできます。

キャッシュファイルがあり、ifの中が走らない場合の確認をされたいときは、ファイルに何か書きだすとか、データベースのログファイルを見てアクセスの無いことを確認してください。

id:dingding

ありがとうございます。

試してみます。

2007/11/19 21:13:31
id:nc_cls No.2

nc_cls回答回数15ベストアンサー獲得回数02007/11/20 10:56:30

ポイント35pt

これで如何でしょうか?

下記の環境でテスト済みです。

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>
id:dingding

大変詳しいコードありがとうございます。

後ほど、ためしみたいと思います。

本当にありがとうございます。

2007/11/20 14:52:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません