この記事では、Smarty アドバンスト アプリケーションのキャッシュ操作スキルを例とともに説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
スマートなキャッシュ制御
smarty は強力なキャッシュ機能を提供します。ただし、ドキュメント全体をキャッシュするのではなく、コンテンツの特定の部分を選択的にキャッシュしたり、コンテンツの特定の部分をキャッシュしたくない場合もあります。たとえば、ページの上部に広告バナーを配置したテンプレートを使用する場合、広告バナーには HTML、画像、FLASH などのあらゆる情報が混在する可能性があります。そのため、ここでは静的リンクを使用できません。広告バナーをキャッシュしたくない場合は、挿入関数で指定する必要があり、広告バナーのコンテンツ情報を取得する関数が必要です。 Smarty は、このキャッシュ制御機能も提供します。
{insert} を使用すると、テンプレートの一部がキャッシュされるのを防ぐことができます
$smarty->register_function($params,&$smarty)を使用すると、プラグインがキャッシュから出力するのを防ぐことができます。 $smarty->register_block($params,&$smarty)
を使用して、ページ全体の特定のブロックがキャッシュされないようにすることもできます。ここで簡単な要件を説明し、キャッシュ出力を制御する 3 つの方法について説明します。
要件: キャッシュされたドキュメントの現在時刻はキャッシュされず、更新されるたびに変更されます。
1. 挿入機能を使用して、テンプレートの一部がキャッシュされないようにします
index.tpl: リーリー
index.phpリーリー
注:関数を定義します。関数名の形式は次のとおりです:
リーリー
関数パラメータはオプションです。他の属性をテンプレートの挿入メソッドに追加する必要がある場合、それらは配列としてユーザー定義関数に渡されます。例:
リーリー
get_current_time 関数では、$params['local'] を通じて属性値を取得できます。get_current_time 関数で現在の Smarty オブジェクトのメソッドまたは属性を使用する必要がある場合は、2 番目のパラメーターを通じて取得できます。
この時点で、index.tpl がキャッシュされていることがわかりますが、現在時刻は更新のたびに常に変化しています。
2. register_function を使用して、プラグインがキャッシュから出力しないようにします
index.tpl: リーリー
index.php:リーリー
注:関数を定義します。関数名の形式は次のとおりです:
smarty_type_name($params, &$smarty)
型は関数です
name はユーザー定義のラベル名です。ここでは {current_time} です
3. register_block を使用して、ページ全体の特定のブロックがキャッシュされるのを防ぎます
index.tpl: リーリー
index.php:リーリー
注:関数を定義します。関数名の形式は次のとおりです:
smarty_type_name($params, &$smarty)
タイプはブロックです
name はユーザー定義のラベル名です。ここでは {dynamic} です
4. 概要
(1) キャッシュを制御する機能:
register_function と register_block を使用すると、プラグイン出力のバッファリング容量を簡単に制御できます。実験で行ったように、デフォルトはキャッシュされるように設定する必要があります。コードをコピーします
コードは次のとおりです: $smarty->register_function('current_time','smarty_function_current_time',false);
ただし、挿入関数はデフォルトではキャッシュされません。そして、このプロパティは変更できません。この意味で、insert 関数は register_function や register_block よりもキャッシュに対する制御が少ないように見えます。
(2) 使いやすさ:
しかし、挿入機能は非常に使いやすいです。この関数が現在のリクエスト プロセスに含まれている限り、smarty は現在のリクエスト プロセスで指定された関数を自動的に検索します。
もちろん register_function は実行時に登録を表示することもできません。ただし、これによる効果は他のテンプレート関数と同じで、すべてキャッシュされ、制御できません。
実行時に register_function を明示的に呼び出してカスタム関数を登録する場合は、is_cached() メソッドを呼び出す前に必ず関数の登録を完了してください。
それ以外の場合、is_cached() ステップでドキュメントをキャッシュすると、登録された関数が見つからないためスマートエラーが発生します
Smartyユーザー定義関数の例
リーリーテンプレートで使用する
リーリーさらに Smarty 関連のコンテンツに興味のある読者は、このサイトの特別トピックをチェックしてください: 「Smarty テンプレートを使い始めるための基本チュートリアル」、「PHP テンプレート テクノロジの概要」、「PDO に基づく PHP データベース操作スキルの概要」 "、"PHP の操作とオペレーターの使用法の概要"、"PHP ネットワーク プログラミング スキルの概要"、"PHP 基本構文の入門チュートリアル"、"PHP オブジェクト指向プログラミングの入門チュートリアル"、"PHP 文字列の使用法の概要"、 『PHP+MySQLデータベース操作入門チュートリアル』と『PHPにおける一般的なデータベース操作スキルのまとめ』
この記事が、Smarty テンプレートに基づいた皆様の PHP プログラム設計に役立つことを願っています。