我在Smarty(背景模板)中有一个外部模板,它在页脚中显示项目某个部分的版本号。通过动态更改Smarty变量。 PHP?
问题变量{$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.从webservice获取字符串变量。 2.获取特定的模板文件。 3.用我的新字符串变量覆盖该模板中当前的Smarty变量值。
“我发现无法在单独页面的点击/加载后动态修改模板”这是什么意思?您清楚地知道PHP正在运行服务器端,并且在发送给客户端后您无法修改页面......您究竟在做什么?如果您想更改该值,只需指定一个新值。 – Brad 2013-05-10 14:28:33
@Brad是的,但每次我点击部分,这个函数被调用 - 我想检查用户是哪个部分的网站(我在上面做的),并修改smarty变量并重新发送模板。我似乎无法在这里实际访问/修改smarty变量.. – user2381114 2013-05-10 14:29:33
您在哪里放置了那条PHP之前或之后的smarty display()命令? – Borgtex 2013-05-10 14:43:31