我想访问一些变量我在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

我之所以要访问这些动态是因为我打电话,其中包括上面的代码的函数的多个版本,它们都使用相同的模板,因此不想简单地使用$标题,$体等作为他们的衣被合计将相互冲突。

既然我知道我要来访问基础上,CONTENT_NAME我设置标题和正文变量,我该怎么智者内实现这一点?

有帮助吗?

解决方案

按我上使用阵列而不是动态变量评论,下面是如何添加到瓦尔阵列的示例:

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}

其他提示

即使这个职位是很老了,在给定的answere是accpeted但对这个问题的的answere。它唯一的其他oppertunity处理的主要问题。

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

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

<强> 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}}会工作。

对于所有谁需要它,欣赏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top