brandizzi
brandizzi

Reputation: 27060

How to get all assigned Smarty variables while running the template?

I would like to get all variables assigned to Smarty inside the template. For example, if I have this code

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

I would like to have a my.tpl like the one below:

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

such as the content of result would be

name is Fulano
age is 22

So, is there a way to get this $magic_array_of_variables?

Upvotes: 6

Views: 8478

Answers (4)

new_bember
new_bember

Reputation: 1

Wonder if {debug} at the start of your tpl is that you need.

Upvotes: 0

rodneyrehm
rodneyrehm

Reputation: 13557

There is no native way to iterate the assigned variables. That said, getTemplateVars() returns an associative array of all assigned values.

Like @perikilis described, you can simply register a plugin function to push the result of getTemplateVars() back to the assigned variables list. If you wanted to prevent some data duplication and other weirdness, you might want to only assign the array_keys() and access the actual variables like {${$varname}} (Smarty3).

Upvotes: 1

periklis
periklis

Reputation: 10188

all code below is smarty2

All smarty variables are held inside the $smarty->_tpl_vars object, so before fetching() your template, you could do:

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

Since this may be impractical, you could also write a small smarty plugin function that does something similar:

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

and from your tpl call it with:

{magic_array_of_variables}

Alternatively, in this function you can do:

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

and in your template:

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

Upvotes: 7

Pevara
Pevara

Reputation: 14310

You can just assign an array to your smarty variable. Something like this:

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

when you assign this to your template with the name magic_array_of_variables, the exact smarty template you provided should give the output you want

Upvotes: 1

Related Questions