Smarty中的动态变量名称

时间:2010-01-24 18:09:33

标签: php smarty dynamic-variables

我想访问我在Smarty中从PHP动态分配的一些变量,这是一个例子:

$content_name = 'body'
$smarty->assign('content_name',$content_name);
$smarty->assign($content_name.'_title',$title);
$smarty->assign($content_name.'_body',$body);

// assigned values
// $content_name = home
// $home_title = $title
// $home_body = $body

我想动态访问它们的原因是因为我调用了包含上面代码的函数的多个版本,它们都使用相同的模板,因此不想简单地使用$ title,$ body等作为它们的valus将相互冲突。

鉴于我知道我想根据我设置的content_name访问标题和正文变量,我怎样才能在smarty中实现这一目标?

2 个答案:

答案 0 :(得分:2)

根据我对使用数组而不是动态变量的评论,这里是一个如何将变量添加到数组的示例:

PHP:

$vars = array();

function whatever() {
    global $vars;


    $vars[] = array(
        'firstname' => 'Mike',
        'surname' => 'Smith'
    );
}

$smarty->assign('vars', $vars);

smarty的:

{section name=loop loop=$vars}
    Name: {$vars[loop].firstname} {$vars[loop].surname}
{/section}

答案 1 :(得分:0)

即使这篇文章很老,但是给出的答案仍然适用,但不是问题的回答。它只是处理主要问题的另一个机会。

问题是如何使用动态变量...

对于给定的样本,它应该类似于

<强> PHP

$content_name = 'body';
$title        = 'hello ';
$body         = 'world';
$smarty->assign('content_name',$content_name);
$smarty->assign($content_name.'_title',$title);
$smarty->assign($content_name.'_body',$body);

<强> Smarty的

{$content_name}          //body
{${$content_name}_title} //hello
{${$content_name}_body}  //world

{${$content_name}_title}{${$content_name}_body} my {$content_name} is awesome
//hello world my body is awesome

这是使用它的动态方式。即使它不是这种情况下的最佳方式:)

如果你有各种各样的物体或多维数组...并且你想要迭代它们,你必须关心整个字符串,而不仅仅是数字......

例如:

<强> PHP

$arr = [
    "attr1" => "hello ",
    "attr2" => "world ",
    "attr3" => "my body is awesome"
];
$smarty->assign('foobar', $arr);

<强> Smarty的

{for $i=1 to 3}
    {$foobar.{"attr$i"}}   //works (whole name must be string var mix)
    //{$foobar.attr{"$i"}} //fails
    //{$foobar.attr{$i}}   //fails
{/for}

但在简单数组上使用{$foobar{$i}}会起作用。

对于所有需要它的人,请尽情享受。