Smartyのinclude内でassignした変数のスコープに関して
Smarty側で特定の文字列を表示したかどうかが判別したくて以下のようなことをしてみた
- base.tpl
{include file='include.tpl'} {assign var='hogehoge' value='fugafuga'}
- include.tpl
{assign var='hoge' value='fuga'}
- test.php
<?php // テンプレート読み込み $smarty->display('base.tpl'); // fugafuga が表示される var_dump($smarty->get_template_vars('hogehoge')); // NULL になる var_dump($smarty->get_template_vars('hogehoge'));
どうやらdisplayしたテンプレートの中でさらにincludeをすると、その中でassignした変数は持ってこられないみたいだ
全ての割り当て変数の値は、インクルードされたテンプレートのスコープが閉じた後に元に戻ります。 これは、インクルードされたテンプレート内で全ての変数を使用可能であるということです。 しかし、インクルードされたテンプレート内での変数の変更は {include} の後でインクルードしている側のテンプレート内では見ることはできません。
ちゃんと書いてあるし・・・orz
Smarty3にするとscopeが指定できるようになるみたいだけどー
{assign} | Smarty