【问题标题】:Dynamic variable names in SmartySmarty 中的动态变量名
【发布时间】:2010-01-24 18:09:33
【问题描述】:

我想访问一些我在 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 等作为它们的值会互相冲突。

鉴于我知道我想根据我设置的 content_name 访问 title 和 body 变量,我如何在 smarty 中实现这一点?

【问题讨论】:

  • 人们还在使用 smarty?
  • 你有没有想过将你的变量分配到一个数组中,然后可以在 Smarty 中循环?
  • @cvondrick 我仍然使用 smarty - 为什么不呢?
  • 在一个数组中...我有一个金发碧眼的时刻吗?...我会检查一下:-P
  • 这里以“body”为例,很难想象动态分配变量的情况,因为 {body_title} 通常会在页面上显示一次,因此无需动态分配任何内容.如果您在模板上管理不同的显示块并且需要分配变量,请务必在每个函数中分配数组中的值并按照亚当的建议循环它们。不过,您的代码设计很难理解,可能需要更多地解释您的用例。

标签: php smarty dynamic-variables


【解决方案1】:

即使这篇文章很旧,给定的答案也被接受,但不是问题的答案。它只是处理主要问题的另一个机会。

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

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

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);

聪明

{$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);

聪明

{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}} 是可行的。

所有需要的人,尽情享受吧。

【讨论】:

    【解决方案2】:

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

    php:

    $vars = array();
    
    function whatever() {
        global $vars;
    
    
        $vars[] = array(
            'firstname' => 'Mike',
            'surname' => 'Smith'
        );
    }
    
    $smarty->assign('vars', $vars);
    

    聪明:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 2011-09-30
      • 2015-06-15
      相关资源
      最近更新 更多