5

テンプレート内でSmartyに割り当てられたすべての変数を取得したいと思います。たとえば、私がこのコードを持っている場合

$smarty->assign('name', 'Fulano');
$smarty->assign('age', '22');
$result = $this->smarty->fetch("file:my.tpl");

私はmy.tpl以下のようなものが欲しいです:

{foreach from=$magic_array_of_variables key=varname item=varvalue}
{$varname} is {$varvalue}
{/foreach}

結果の内容などは

name is Fulano
age is 22

それで、これを取得する方法はあり$magic_array_of_variablesますか?

4

3 に答える 3

6

以下のすべてのコードはsmarty2です

すべてのsmarty変数は、$ smarty-> _ tpl_varsオブジェクト内に保持されているため、テンプレートをfetching()する前に、次の操作を実行できます。

$smarty->assign('magic_array_of_variables', $smarty->_tpl_vars);

これは実用的でない可能性があるため、同様のことを行う小さなスマートプラグイン関数を作成することもできます。

function smarty_function_magic_array_of_variables($params, &$smarty) {
    foreach($smarty->_tpl_vars as $key=>$value) {
        echo "$key is $value<br>";
    }
}

そしてあなたのtplからそれを次のように呼びます:

{magic_array_of_variables}

または、この関数で次の操作を実行できます。

function smarty_function_magic_array_of_variables($params, &$smarty) {
    $smarty->_tpl_vars['magic_array_of_variables'] =  $smarty->_tpl_vars;
}

およびテンプレート内:

{magic_array_of_variables}
{foreach from=$magic_array_of_variables key=varname item=varvalue}
{$varname} is {$varvalue}
{/foreach}
于 2012-08-06T05:37:01.340 に答える
1

smarty変数に配列を割り当てるだけです。このようなもの:

$array = array('name' => 'Fulano', 'age' => '22');

これを名前でテンプレートに割り当てると、magic_array_of_variables提供した正確なsmartyテンプレートが必要な出力を提供するはずです。

于 2012-08-05T04:37:54.303 に答える
1

割り当てられた変数を反復するネイティブな方法はありません。そうは言っても、getTemplateVars()は、割り当てられたすべての値の連想配列を返します。

説明した@perikilisのように、プラグイン関数を登録するだけで、getTemplateVars()の結果を割り当てられた変数リストにプッシュバックできます。一部のデータ重複やその他の奇妙さを防ぎたい場合は、array_keys()のみを割り当て、{${$varname}}(Smarty3)などの実際の変数にアクセスすることをお勧めします。

于 2012-08-06T08:28:07.623 に答える