リソースプラグインは、テンプレートソースや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()
も参照してください。