Table of Contents
Smarty は、テンプレートから PHP の オブジェクト へのアクセスを許可しています。オブジェクトにアクセスするには2つの方法があります。
1つめのメソッドは素晴らしいテンプレート構文を持っています。 それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。 しかし繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません。 あなたのニーズによって選択するメソッドは決まりますが、 テンプレート構文を最小限守るには必ず1つめのメソッドを使用して下さい。
$security
が有効の時、('_' から始まる) プライベートメソッドや関数にはアクセス出来ません。
もしメソッドとプロパティで同じ名前が存在する場合、メソッドが優先されます。
第3パラメータにメソッドやパラメータをリストした配列を与える事でアクセスを制限できます。
デフォルトではテンプレートからオブジェクトに渡されたパラメータは
カスタム関数
によって同じ方法で渡されます。 連想配列は第1パラメータとして渡され、
smarty オブジェクトは第2パラメータとして渡されます。
もし古いオブジェクトパラメータの渡し方のように各引数を一度に渡したいなら、第4パラメータに
FALSE を指定します。
任意の第5パラメータは
format が TRUE の時だけ影響し、
ブロックとして扱われるべきオブジェクトのメソッドのリストを格納します。
これはこれらのメソッドがテンプレート内に終了タグ
({foobar->meth2}...{/foobar->meth2})
を持つことを意味し、メソッドへのパラメータは
block-function-plugins
へのパラメータと同じ構文となります。つまり、4つのパラメータ
$params、
$content、
&$smarty および
&$repeat を持ち、ブロック関数プラグインのように振る舞います。
Example 15.1. 登録または割り当てられたオブジェクトを使用する
<?php
// オブジェクト
class My_Object {
function meth1($params, &$smarty_obj) {
return 'this is my meth1';
}
}
$myobj = new My_Object;
// オブジェクトを (参照で) 登録します
$smarty->register_object('foobar',$myobj);
// いくらかのメソッド又はプロパティを制限したい場合、それらを配列の値としてリストします
$smarty->register_object('foobar',$myobj,array('meth1','meth2','prop1'));
// 古いオブジェクトパラメータの形式を使いたい場合、booleanのfalseを渡します。
$smarty->register_object('foobar',$myobj,null,false);
// オブジェクトを割り当てる事が可能です(できれば参照渡しで)
$smarty->assign_by_ref('myobj', $myobj);
$smarty->display('index.tpl');
?>
そして index.tpl
でオブジェクトにアクセスするには以下のようにします。
{* 登録されたオブジェクトにアクセスします *}
{foobar->meth1 p1='foo' p2=$bar}
{* outputに割り当てる事が可能 *}
{foobar->meth1 p1='foo' p2=$bar assign='output'}
the output was {$output}
{* 割り当てたオブジェクトにアクセスします *}
{$myobj->meth1('foo',$bar)}
register_object()
および
assign()
も参照してください。