我在Smarty中有一个外部模板(背景模板),它在页脚中显示项目某个部分的版本号。
有问题的变量{$NoVersion}
是从Web服务响应返回的字符串参数。我现在有两个单独的Web服务调用,每个调用用于项目的不同部分并包含不同的字符串参数。我想根据我所在项目的部分更改页脚中的版本控制字符串。
我可以在页面本身加载时使用PHP分配其中一个,但我发现在单独页面的单击/加载发生后动态修改模板是不可能的。
那么,如何动态修改PHP内定义模板中的smarty变量?
我的代码如下。
zone.tpl:
<div>
<p>The version - {$NoVersion}</p>
</div>
腓:
$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_dump:
$ 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.从webservice获取字符串变量。 2.获取特定模板文件。 3.使用我的新字符串变量覆盖该模板中的当前Smarty变量值。
答案 0 :(得分:0)
您的$tplContent
对象可能代表一个模板,或者是准备一个的变量(它实际上并不是来自Smarty对象),但是您粘贴的代码中没有任何地方可以显示您实际上将该模板呈现为HTML。
只创建一个正确类型的新对象不会改变现有渲染代码的作用 - 您需要在实际用于显示页面的对象上进行赋值。