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