人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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へのアクセスがあるような気もしています。


●質問者: dingding
●カテゴリ:インターネット ウェブ制作
✍キーワード:dB Smarty いまいち アクセス キャッシュ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● guesthouse
●35ポイント

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

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

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

◎質問者からの返答

ありがとうございます。

試してみます。


2 ● nc_cls
●35ポイント

これで如何でしょうか?

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

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>
◎質問者からの返答

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ