Даже если этот пост очень старый, данный ответ принимается, но не отвечает на вопрос. Это всего лишь другая возможность решить главную проблему.
Вопрос в том, как использовать динамические переменные ...
для данного образца, это должно быть что-то вроде
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}}
в простом массиве будет работать.
Для всех, кому это нужно, наслаждайтесь.