リソースプラグイン (プラグインによる Smarty の拡張) - PHPプロ!マニュアル

Smartyマニュアル

プラグインによる Smarty の拡張 - リソースプラグイン

リソースプラグイン

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



Pick Up Q&A

Q
ログファイルの中の空のデータ行を削除したい
 このエントリーをはてなブックマークに追加 
A
ログのデータ個数(列数)が固定で、空のログが"<><><>"だと既知であれば if ($line === "<><><>") { continue; } で読み飛ばしてもいいのでは? ...

>>続きを読む

まずは配列や文字列の扱いから、じっくり勉強して行きましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)

Q&A掲示板 新着情報