在assign语句中为另一个变量使用Smarty变量



Smarty 3,PHP 5.6,Windows Server 2012,IIS10

以下代码

$GLOBALS["smarty"]->assign("skin", "default");
$GLOBALS["smarty"]->assign("basePath", "/cart/");
$GLOBALS["smarty"]->assign("cssFiles", "{$basePath}{$skin}/product-page.css");
$GLOBALS["smarty"]->assign("cssFiles", "{eval $basePath}{eval $skin}/product-page.css");
$GLOBALS["smarty"]->assign("cssFiles", "{eval var=$basePath}{eval var=$skin}/product-page.css");

给出以下输出

Smarty_Variable Object
(
[value] => /product-page.css
[nocache] => 
)
Smarty_Variable Object
(
[value] => {eval }{eval }/product-page.css
[nocache] => 
)
Smarty_Variable Object
(
[value] => {eval var=}{eval var=}/product-page.css
[nocache] => 
)

目标是:

Smarty_Variable Object
(
[value] => /cart/default/product-page.css
[nocache] => 
)

我浏览了所有的文档,在谷歌上搜索了一个小时。我错过了什么?

时间已经够长了,我很惊讶没有人回答,所以,在互联网上找到信息的最快方法就是说一些不正确的话,我将用我的答案来回答我自己的问题,并希望我错了,几分钟内就会被纠正。

答:你想做的是不可能的。您必须将Smarty模板变量中的值转换为PHP变量,然后将它们重新插入,如下所示:

$bp = $GLOBALS["smarty"]->tpl_vars['basePath'];
$sk = $GLOBALS["smarty"]->tpl_vars['skin'];
$GLOBALS["smarty"]->append("cssFiles", $bp . "/" . $sk . "/product-page.css");

最新更新