質問

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}} 単純な配列では機能します。

必要な方はぜひお楽しみください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top