Vous devez créer une variable dont la valeur est {$testVariable_123}
Ensuite, vous pouvez appeler le {eval}
à ce sujet.
Le problème est, je ne pouvais pas trouver un moyen de le faire dans le bon sens.
Tout ce qui semble raisonnablement bon ne fonctionne pas et les options qui fonctionnent sont laides.
Peut-être que vous envisageriez des changements dans la conception de votre application?
Voici ce que j'ai réussi à travailler:
# file.php:
$smarty->assign("autoValue", 123);
$smarty->assign("testVariable_123", "foo");
//Option 1
$smarty->assign("anotherValue", "{\$testVariable_123}");
//Option 2
$smarty->assign("rb", '}'); // Hack to get the right bracket } withou Smarty parsing it.
//Option 3
$smarty->assign("mask", '{$testVariable_%s}'); // pass the full string_format "mask" directly from PHP
# file.tpl
1) Uses the $anotherValue from PHP:
Plain: {$anotherValue}
Evaled: {eval var=$anotherValue}
2) Build the string on Smarty itself:
{assign var="yetAnotherValue" value=$autoValue|string_format:"{\$testVariable_%s$rb"}
Plain: {$yetAnotherValue}
Evaled: {eval var=$yetAnotherValue}
3) Build the string using the mask from php:
{assign var="enoughOfValue" value=$autoValue|string_format:$mask}
Plain: {$enoughOfValue}
Evaled: {eval var=$enoughOfValue}
La plupart du temps, le problème est que Smarty va ignorer un support de fermeture} ou une variable $, même si elle est au milieu d'une chaîne. S'échapper avec \ ne fonctionne pas non plus.
Si vous essayez:
{assign var="yetAnotherValue" value="{\$testVariable_$autoValue}"}
il ignorera le « } à la fin et de considérer la déclaration Smarty comme:
{assign var="yetAnotherValue" value="{\$testVariable_$autoValue}
et il évaluera les testVariable $ même quand il était censé
Donc, nous allons finir avec {\123
comme la valeur :(
Tout ce que j'ai essayé a fini par trébucher sur cette question. Si vous trouvez une meilleure façon, s'il vous plaît, assurez-vous que vous partagez ici :)
Merci beaucoup. Je sais que c'est compliqué .. :( J'ai changé de logique dans mon application –
Cool, je suis heureux de vous aider, au moins, c'était amusant de trouver une solution (moche) :) –
Juste comment vous faire prendre conscience de ma [réponse] (http: // stackoverflow.com/a/29312144/2459228), comme vous semblez être intéressé par une solution ne pas trébucher sur le problème que vous avez décrit :) –