0

我在 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 变量值。

4

1 回答 1

0

您的$tplContent对象可能代表一个模板,或准备模板的变量(它似乎实际上并非来自 Smarty 对象),但在您粘贴的代码中没有任何地方显示您实际将该模板呈现为 HTML 的位置。

仅仅创建一个正确类型的新对象不会改变现有渲染代码的作用——您需要对实际用于显示页面的对象进行分配。

于 2013-05-10T14:32:39.827 回答