リソースプラグインは、テンプレートソースや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) { // テンプレートでは使用しません } ?>
registerResource()
および
unregisterResource()
も参照してください。