特定の領域のキャッシュ (必要なキャッシュのみ) を無効にするには、いくつかの方法があります:
一、インサー:
insert タグで使用される処理関数を定義します。関数名の形式は、insert_xx (array $params, object &$smarty) です。つまり、定義する関数が insert_abc の場合です。 、テンプレート内で使用方法は {insert name=abc} です
パラメータは$paramsを通じて渡されます
挿入プラグインにすることもできます。ファイル名はinsert.xx.php、関数名はsmarty_insert_aa($params,&$smarty)、xxの定義は上記と同じです
二、登録ブロック:
ブロックを定義します:smarty_block_name($params,$content, &$smarty){return $content;} //nameはエリア名を表します
Register block:$smarty->register_block(name, Smarty_block_name, false); //3 番目のパラメータ false は、この領域がキャッシュされないことを意味します
テンプレートの作成: {name} content {/name}
ブロックプラグインとして記述:
(1) プラグイン関数 block.cacheless.php を定義し、smarty の plugins ディレクトリに配置します
block.cacheless.phpの内容は以下の通りです:
関数 Smarty_block_cacheless($param, $content, &$smarty) {
$content を返す;
}
?>
(2) プログラムとテンプレートを書く
サンプルプログラム: testCacheLess.php
include(Smarty.class.php);
$smarty = 新しい Smarty;
$smarty->caching=true;
$smarty->cache_lifetime = 6;
$smarty->display(cache.tpl);
?>
使用したテンプレート:cache.tpl
キャッシュ済み: {$smarty.now}
{キャッシュレス}
キャッシュなし: {$smarty.now}
{/キャッシュレス}
今すぐ実行すると、コンテンツの両方の行がキャッシュされていることがわかります
(3) Smarty_Compiler.class.php を書き換えます (注: このファイルは非常に重要です。必要に応じて復元するために、最初にバックアップしてください)
Find$this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true); //私のは行 705 です
次のように変更されました:
if($tag_command == キャッシュレス) $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, false);
else $this->_plugins[block][$tag_command] = array($plugin_func, null, null, null, true);
元の文の最後のパラメータを直接 false に変更することもできます。smarty の内部の仕組みはよくわからないので、ブロックがキャッシュレスである限りキャッシュされないという判断を追加しました。
(4)OK、template_c 内のコンパイル済みファイルをクリアして、再度実行します。うまくいきますか?。 出典: プログラミング ホーム