3 votes

Noms de variables dynamiques dans Smarty

Je veux accéder à des variables que j'ai assignées dynamiquement depuis 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 dynamiquement est que j'appelle plusieurs versions d'une fonction qui inclut le code ci-dessus, elles utilisent toutes le même modèle et je ne veux donc pas utiliser simplement $title, $body etc. car leurs valeurs entreraient en conflit les unes avec les autres.

Si je sais que je veux accéder aux variables title et body en fonction du content_name que j'ai défini, comment puis-je réaliser cela dans smarty ?

4voto

Dwza Points 1955

Même si ce message est très ancien, la réponse donnée est acceptée mais n'est pas une réponse à la question. Il s'agit seulement d'une autre opportunité de traiter le problème principal.

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

pour l'échantillon donné, il devrait ressembler à 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);

Intelligent

{$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

C'est la façon la plus dynamique de l'utiliser. Même si ce n'est pas la meilleure dans ce cas :)

Si vous avez des objets ou des tableaux multidimensionnels... et que vous voulez les itérer, vous devez vous préoccuper de la chaîne entière et pas seulement du nombre...

Par exemple :

PHP

$arr = [
    "attr1" => "hello ",
    "attr2" => "world ",
    "attr3" => "my body is awesome"
];
$smarty->assign('foobar', $arr);

Intelligent

{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 l'utilisation de {$foobar{$i}} sur un simple tableau fonctionnerait.

Pour tous ceux qui en ont besoin, bonne chance.

2voto

Adam Hopkinson Points 16747

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

php :

$vars = array();

function whatever() {
    global $vars;

    $vars[] = array(
        'firstname' => 'Mike',
        'surname' => 'Smith'
    );
}

$smarty->assign('vars', $vars);

intelligente :

{section name=loop loop=$vars}
    Name: {$vars[loop].firstname} {$vars[loop].surname}
{/section}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X