変数を代入する際には、メイン Smarty オブジェクト、
createData() で作ったデータオブジェクト、
createTemplate() で作ったテンプレートオブジェクト
のいずれかのスコープを選ぶことができます。
これらのオブジェクトは連結することができます。
テンプレートからは、自分自身のオブジェクトの変数だけでなく
連結した親オブジェクトに代入された変数も見ることができます。
デフォルトでは、$smarty->display(...) や
$smarty->fetch(...)
でレンダリングしたオブジェクトは自動的に
Smarty オブジェクトの変数スコープにリンクされます。
個々のデータあるいはテンプレートのスコープに代入すれば、 テンプレートからどの変数が見えるのかを完全に制御することができます。
Example 4.6. 変数のスコープの例
// 変数を Smarty オブジェクトのスコープに代入します
$smarty->assign('foo','smarty');
// 変数をデータオブジェクトのスコープに代入します
$data = $smarty->createData();
$data->assign('foo','data');
$data->assign('bar','bar-data');
// 変数を他のデータオブジェクトのスコープに代入します
$data2 = $smarty->createData($data);
$data2->assign('bar','bar-data2');
// 変数をテンプレートオブジェクトのスコープに代入します
$tpl = $smarty->createTemplate('index.tpl');
$tpl->assign('bar','bar-template');
// 変数を Smarty オブジェクトへのリンクを持つテンプレートオブジェクトのスコープに代入します
$tpl2 = $smarty->createTemplate('index.tpl',$smarty);
$tpl2->assign('bar','bar-template2');
// この display() は、$smarty オブジェクトの $foo='smarty' が見えます
$smarty->display('index.tpl');
// この display() は、データオブジェクト $data の $foo='data' と $bar='bar-data' が見えます
$smarty->display('index.tpl',$data);
// この display() は、データオブジェクト $data の $foo='data' と
// データオブジェクト $data2 の $bar='bar-data2' が見えます
$smarty->display('index.tpl',$data2);
// この display() は、テンプレートオブジェクト $tpl の $bar='bar-template' が見えます
$tpl->display(); // あるいは $smarty->display($tpl);
// この display() は、テンプレートオブジェクト $tpl2 の $bar='bar-template2' と
// Smarty オブジェクト $foo の $foo='smarty' が見えます
$tpl2->display(); // あるいは $smarty->display($tpl2);
assign()、
createData() および
createTemplate()
も参照ください。