---
Array (2)
0 => Array (2)
page_nm => "トップ"
page_sysnm => "top"
1 => Array (3)
page_nm => "Smartyマニュアル"
page_sysnm => "manual_smarty"
this => 1
---
リソースプラグインリソースプラグイン
リソースプラグインは、テンプレートソースやPHPスクリプトのコンポーネントを
Smarty に提供する一般的な方法と意図されています
(例: データベース, LDAP, 共有メモリ, ソケット等)。
各種リソースのために4つの関数を登録する必要があります。
これらの関数の最初のパラメータには要求されたリソースが渡され、
最後のパラメータには Smarty のオブジェクトが渡されます。
残りのパラメータは関数によって異なります。
bool smarty_resource_name_source
(string $rsrc_name, string &$source, object &$smarty)
bool smarty_resource_name_timestamp
(string $rsrc_name, int &$timestamp, object &$smarty)
bool smarty_resource_name_secure
(string $rsrc_name, object &$smarty)
bool smarty_resource_name_trusted
(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
スクリプトコンポーネントのみです。
しかし、テンプレートリソースであっても定義する必要があります。
例 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 に代入します $sql = new SQL; $sql->query("select tpl_source from my_table where tpl_name='$tpl_name'"); if ($sql->num_rows) { $tpl_source = $sql->record['tpl_source']; return true; } else { return false; } }
function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty) { // ここでデータベースを呼び出し、$tpl_timestampに代入します $sql = new SQL; $sql->query("select tpl_timestamp from my_table where tpl_name='$tpl_name'"); if ($sql->num_rows) { $tpl_timestamp = $sql->record['tpl_timestamp']; return true; } else { return false; } }
function smarty_resource_db_secure($tpl_name, &$smarty) { // 全てのテンプレートがセキュアであるとみなします return true; }
function smarty_resource_db_trusted($tpl_name, &$smarty) { // テンプレートでは使用しません } ?>
|
|
register_resource()
および
unregister_resource()
も参照してください。