{assign} は、テンプレート変数を
テンプレートの実行時に
代入します。
Note
テンプレート内で変数に代入するというのは、 本質的にはアプリケーションのロジックをプレゼンテーションに持ち込んでいることになります。 これは本来 PHP 側でやったほうがうまく処理できることでしょう。 自己責任のもとで使いましょう。
Note
テンプレート変数を代入するときの
短縮形
も参照ください。
属性
| 属性名 | 型 | 必須 | デフォルト | 概要 |
|---|---|---|---|---|
| var | string | Yes | n/a | 代入される変数の名前 |
| value | string | Yes | n/a | 代入される値 |
| scope | string | No | n/a | 代入する変数のスコープ。'parent'、'root' あるいは 'global' |
オプションのフラグ
| 名前 | 概要 |
|---|---|
| nocache | 変数を 'nocache' 属性つきで代入する |
Example 7.8. {assign}
{assign var="name" value="Bob"}
{assign "name" "Bob"} {* 短縮形 *}
The value of $name is {$name}.
上の例の出力は次のようになります。
The value of $name is Bob.
Example 7.9. nocache を指定した変数による {assign}
{assign var="name" value="Bob" nocache}
{assign "name" "Bob" nocache} {* 短縮形 *}
The value of $name is {$name}.
上の例の出力は次のようになります。
The value of $name is Bob.
Example 7.10. 計算結果の {assign}
{assign var=running_total value=$running_total+$some_array[$row].some_value}
Example 7.11. 呼び出し元テンプレートのスコープでの {assign}
インクルードされたテンプレート内で代入した変数は、インクルードした側のテンプレートからも見えます。
{include file="sub_template.tpl"}
...
{* サブテンプレートで代入した変数を表示します *}
{$foo}<br>
...
上のテンプレートでインクルードしている sub_template.tpl の例を次に示します。
...
{* foo はインクルード元のテンプレートからも見えます *}
{assign var="foo" value="something" scope=parent}
{* bar はこのテンプレート内でしか見えません *}
{assign var="bar" value="value"}
...
Example 7.12. 現在のスコープツリーへの変数の {assign}
現在のツリーのルートに変数を代入することができます。この変数は、同じツリーを使うすべてのテンプレートから見えるようになります。
{assign var=foo value="bar" scope="root"}
Example 7.13. グローバル変数の {assign}
グローバル変数は、すべてのテンプレートから見えます。
{assign var=foo value="bar" scope="global"}
{assign "foo" "bar" scope="global"} {* 短縮形 *}
Example 7.14. {assign} された変数への PHP スクリプトからのアクセス
{assign} した変数に PHP スクリプトからアクセスするには
getTemplateVars() を使います。
このテンプレートでは、変数 $foo を作ります。
{assign var="foo" value="Smarty"}
テンプレート変数にアクセスできるのは、テンプレートの実行中か実行後のみです。 次のスクリプトのようになります。
<?php
// まだテンプレートを実行していないので、これは何も出力しません
echo $smarty->getTemplateVars('foo');
// テンプレートを変数に取り込みます
$whole_page = $smarty->fetch('index.tpl');
// テンプレートを実行した後なので、これは 'smarty' を出力します
echo $smarty->getTemplateVars('foo');
$smarty->assign('foo','Even smarter');
// これは 'Even smarter' を出力します
echo $smarty->getTemplateVars('foo');
?>
次にあげる関数にも、オプションで テンプレート変数を代入することができます。
{capture},
{include},
{include_php},
{insert},
{counter},
{cycle},
{eval},
{fetch},
{math},
{textformat}
{$var=...}、
assign()
および
getTemplateVars()
も参照ください。
