質問
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 内でこれを実現するにはどうすればよいでしょうか?
解決
ではなく、動的変数の配列を使用しての私のコメントを1として、ここでは、アレイにvarsの追加方法の例を示します。
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}
他のヒント
この投稿が非常に古い場合でも、指定された回答は受け入れられますが、質問に対する回答ではありません。それは主要な問題を処理するための唯一の機会です。
問題は動的変数をどのように使用するかです...
指定されたサンプルの場合、次のようになります。
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}}
単純な配列では機能します。
必要な方はぜひお楽しみください。
所属していません StackOverflow