2012-02-23 8 views
4

スマートキャッシュ機能を使用していますが、今日はコンテンツが正しくリフレッシュされていないことがわかりました。データベースコンテンツエラーSmartyキャッシュ

私はこれらのテンプレートとSmartyの中のファイルのキャッシュを使用します。

  • のindex.html(メインページ(約8K)
  • するlist.htmlは、(約10ページをキャッシュするためにこれを使用キャッシュするためにこれを使用します -

    のcache_dir &キャッシュFEACを:約私はカスタムCMSを持っており、これは私はそれが更新されないのメインページを変更することができ、私が使用

)をそれぞれが7kΩキャッシュファイルを削除すると、コンテンツがリフレッシュされていることがわかります。

私はページコンテンツを更新するたびにそれらを削除せずにこれらのファイルを簡単に更新できますか?

答えて

1

ここには2つのオプションがあります。

1)index.htmlまたはlist.htmlについて何かを更新する場合、$smarty->clearCache("index.html");を使用してSmartyにそれぞれのキャッシュをパージするように指示してください。the docsを参照してください。

2)自分でCacheResourceを書きます。次に、fetch()メソッドとfetchTimestamp()メソッドをオーバーロードして、一部のデータベースに外部の変更時間を追加照会できます。この方法で、スマートに何かが変わったことを通知する必要はありません。clearCache()

最初のオプションは、実装が簡単かつ迅速です。 2番目のオプションはグローバルなもので、追加のDB接続にリソースを無駄にする可能性があります。

4

あなたはこれを使用することができます。

$Smarty = new Smarty(); 
$Smarty->caching = 1; 

$SmartyTemplate = $Smarty->createTemplate($yourfile, $your_cache_id); 
// $row = mysql_query("select date_modified from table where ... 

if ($SmartyTemplate->isCached() && $SmartyTemplate->cached->timestamp < $row['date_modified']) { 
    $Smarty->clearCache($yourfile, $your_cache_id); 
} 
$SmartyTemplate->assign('variables', 'data'); 
$SmartyTemplate->display(); 
+1

あなたが見[$ smarty-> force_cache](http://www.smarty.net/docs/en/variable.force.cache.tplを持つべきです)。 'clearCache()'を呼び出さずにキャッシュを "手動で"無効にした場合は、これをtrueに設定してください。 – rodneyrehm

+3

@rodneyrehmなぜですか?クリアするとクリアされ、強制的に上書きされますか? – EscoMaji