リソースプラグインは、テンプレートソースやPHPスクリプトのコンポーネントを Smarty に提供する一般的な方法と意図されています (例: データベース, LDAP, 共有メモリ, ソケット等)。
各種リソースのために4つの関数を登録する必要があります。 これらの関数の最初のパラメータには要求されたリソースが渡され、 最後のパラメータには Smarty のオブジェクトが渡されます。 残りのパラメータは関数によって異なります。
bool smarty_resource_name_source( |
$rsrc_name, | |
&$source, | ||
&$smarty) ; |
string $rsrc_name
;string &$source
;object &$smarty
;bool smarty_resource_name_timestamp( |
$rsrc_name, | |
&$timestamp, | ||
&$smarty) ; |
string $rsrc_name
;int &$timestamp
;object &$smarty
;bool smarty_resource_name_secure( |
$rsrc_name, | |
&$smarty) ; |
string $rsrc_name
;object &$smarty
;bool smarty_resource_name_trusted( |
$rsrc_name, | |
&$smarty) ; |
string $rsrc_name
;object &$smarty
;
1つめの関数 source()
ではリソースを取得します。
第2パラメータ $source
は参照で渡され、ここに結果が格納されます。
戻り値は、リソースの取得に成功すれば TRUE
、
それ以外は FALSE
となります。
2つめの関数 timestamp()
は、
要求されたリソースが最後に修正された時間(UNIXタイムスタンプ)を取得します。
第2パラメータ $timestamp
は参照で渡され、
ここにタイムスタンプが格納されます。タイムスタンプが取得できれば
TRUE
、それ以外は FALSE
を返します。
3つめの関数 secure()
は、
要求されたリソースがセキュアであるかどうかに応じて TRUE
又は FALSE
を返します。
この関数はテンプレートリソースのためにだけ用いられますが、定義する必要があります。
4つめの関数 trusted()
は、
要求されたリソースが信用できるかどうかに応じて TRUE
又は FALSE
を返します。
この関数を使用するのは、
{include_php}
タグあるいは
{insert}
タグで src
属性によって要求された PHP
スクリプトコンポーネントのみです。
しかし、テンプレートリソースであっても定義する必要があります。
Example 16.10. リソースプラグイン
<?php /* * Smarty plugin * ------------------------------------------------------------- * File: resource.db.php * Type: resource * Name: db * Purpose: データベースからテンプレートを取得する * ------------------------------------------------------------- */ function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty) { // ここでデータベースを呼び出し、 // 失際のテンプレートの内容を $tpl_source に代入します $tpl_source = "This is the template text"; // 成功した場合に true を返します。false を返すと失敗したことになります return true; } function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty) { // テンプレートの最終更新時刻の Unix タイムスタンプを // $tpl_timestampに代入するためにデータベースを呼び出します // これで、再コンパイルが必要かどうかを判断します $tpl_timestamp = time(); // この例だと常に再コンパイルとなります! // 成功した場合に true を返します。false を返すと失敗したことになります return true; } function smarty_resource_db_secure($tpl_name, &$smarty) { // 全てのテンプレートがセキュアであるとみなします return true; } function smarty_resource_db_trusted($tpl_name, &$smarty) { // テンプレートでは使用しません } ?>
register_resource()
および
unregister_resource()
も参照してください。