smarty @Wiki

リソースプラグイン

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

リソースプラグイン

リソースプラグインは、テンプレートソースや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つめの関数ではリソースを取得します。第2パラメータはその結果が格納される、参照渡しされた変数です。戻り値には、リソースの取得が成功すればtrue、それ以外はfalseを返します。

2つめの関数では要求されたリソースが最後に修正された時間(UNIXタイムスタンプ)を取得します。第2パラメータはタイムスタンプが格納される、参照渡しされた変数です。タイムスタンプが取得できればtrue、それ以外はfalseを返します。

3つめの関数では要求されたリソースがセキュアであるかどうかに応じてtrue又はfalseを返します。この関数はテンプレートリソースのためにだけ用いられますが、定義する必要があります。

4つめの関数では要求されたリソースが信用できるかどうかに応じてtrue又はfalseを返します。この関数は、src属性を持ったinclude_php又はinsertタグによってリクエストされたphpスクリプトのためにのみ使用されます。しかしそれはテンプレートリソースのために定義される必要があります。

詳細は、register_resource(), unregister_resource()の項を参照して下さい。

例 15-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)
{
   // テンプレートからは使用しない
}
?>
ウィキ募集バナー