题
我想访问一些变量我在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}}
会工作。
对于所有谁需要它,欣赏。
不隶属于 StackOverflow