我在 Smarty 中有一个外部模板(背景模板),它在页脚中显示项目某个部分的版本号。
有问题的变量{$NoVersion}
是从 Web 服务响应返回的字符串参数。我现在有两个单独的 Web 服务调用,每个调用用于项目的不同部分并包含不同的字符串参数。我想根据我所在项目的部分更改页脚中的版本控制字符串。
我可以在页面本身加载时使用 PHP 分配其中一个,但我发现在单独页面的单击/加载发生后动态修改模板是不可能的..
那么,如何在 PHP 内部定义的模板中动态修改 smarty 变量呢?
我的代码如下。
zone.tpl:
<div>
<p>The version - {$NoVersion}</p>
</div>
php:
$wsName = $this->nameWS; // this returns a string - either 'reporting' or 'other' depending on which section of the website has been selected.
if($wsName == "reporting"){ // reporting is one of the two sections
$tplContent = new CopixTpl(); // template content
$modEvadmin = new boxModule('evadmin'); // new module
boxWebServices::create($wsName); // start web service dependant on section
$RetourDTOD = boxWebServices::call($wsName.'|GetVersion'); // get string parameter
$tplContent->assign('NoVersion', (is_string($RetourDTOD)) ? $RetourDTOD : '?'); // Is supposed to assign string parameter to {$NoVersion} smarty variable in zone.tpl.
}
我错过了什么吗?我似乎要返回字符串和所有内容,但最后一行没有更新我面前页面上的 smarty 变量。我是否必须在某处表示特定的模板文件?
这是上面的一些 var_dumps:
$wsName var_dump =string(9) "reporting"
分配前的 $tplContent var_dump =
object(CopixTpl)#350 (2) {
["_vars"]=>
array(0) {
}
["templateFile"]=>
NULL
}
$RetourDTOD var_dump =string(14) "1.0.8"
赋值后的 $tplContent var_dump(上面的最后一行代码) =
object(CopixTpl)#350 (2) {
["_vars"]=>
array(1) {
["evaNoVersion"]=>
string(14) "1.0.8"
}
["templateFile"]=>
NULL
}
如果上述内容令人困惑,基本上可以这样做:
如果部分: 1. 从 web 服务获取字符串变量。2.获取特定的模板文件。3. 用我的新字符串变量覆盖该模板中的当前 Smarty 变量值。