Question

Je veux être accéder à certaines variables que j'ai attribué dynamiquement à partir de PHP dans Smarty, voici un exemple:

$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

La raison pour laquelle je veux y accéder est dynamique parce que j'appelle plusieurs versions d'une fonction qui inclut le code ci-dessus, ils utilisent tous le même modèle et donc ne veulent pas utiliser simplement le titre de $, le corps $ etc comme valus va entrer en conflit.

Étant donné que je sais que je veux accéder aux variables de titre et le corps sur la base du content_name je mis, comment puis-je obtenu cela dans Smarty?

Était-ce utile?

La solution

Comme par mon commentaire sur l'utilisation d'un tableau au lieu de variables dynamiques, voici un exemple de la façon d'ajouter les vars à un tableau:

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}

Autres conseils

Même si ce poste est très ancienne, la answere donnée est accpeted mais pas answere pour la question. Son seul un autre oppertunity pour traiter principal problème.

La question est de savoir comment utiliser des variables dynamiques ...

pour l'échantillon donné, il devrait être quelque chose comme

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

Ceci est la façon dynamique à l'utiliser. Même si ce ne est pas la meilleure façon dans ce cas:)

Si vous avez type d'objets ou tableau multidimensionnel ... et vous aimez les itérer, vous devez prendre soin de la chaîne entière et non pas seulement le nombre ...

Par exemple:

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}

Mais en utilisant {$foobar{$i}} sur un simple tableau fonctionnerait.

Pour tous ceux qui en ont besoin, en profiter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top