Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过动态更改Smarty变量。PHP?_Php_Variables_Dynamic_Smarty_Smarty3 - Fatal编程技术网

通过动态更改Smarty变量。PHP?

通过动态更改Smarty变量。PHP?,php,variables,dynamic,smarty,smarty3,Php,Variables,Dynamic,Smarty,Smarty3,我在Smarty中有一个外部模板(后台模板),它在页脚中显示项目特定部分的版本号 所讨论的变量{$NoVersion},是从web服务响应返回的字符串参数。我现在有两个独立的web服务调用,每个调用用于项目的不同部分,并包含不同的字符串参数。我想更改页脚中的版本控制字符串,具体取决于我所在项目的部分 当页面本身加载时,我可以使用PHP分配其中一个,但我发现在单独页面发生单击/加载后,不可能动态修改模板 那么,如何在PHP内部的已定义模板中动态修改smarty变量呢 我的代码如下 zone.tpl

我在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变量。我必须在那里的某个地方指定一个特定的模板文件吗


下面是上面的一些变量转储:

$wsName var\u dump=
string(9)“报告”

$tplContent var\u分配前转储=

object(CopixTpl)#350 (2) {
  ["_vars"]=>
  array(0) {
  }
  ["templateFile"]=>
  NULL
}
object(CopixTpl)#350 (2) {
  ["_vars"]=>
  array(1) {
    ["evaNoVersion"]=>
    string(14) "1.0.8"
  }
  ["templateFile"]=>
  NULL
}
$RetourDTOD var_dump=
字符串(14)“1.0.8”

$tplContent var\u分配后转储(上面代码的最后一行)=

object(CopixTpl)#350 (2) {
  ["_vars"]=>
  array(0) {
  }
  ["templateFile"]=>
  NULL
}
object(CopixTpl)#350 (2) {
  ["_vars"]=>
  array(1) {
    ["evaNoVersion"]=>
    string(14) "1.0.8"
  }
  ["templateFile"]=>
  NULL
}

如果上述内容令人困惑,基本上可以这样做:

如果部分: 1.从webservice获取字符串变量。 2.获取特定的模板文件。 3.用我的新字符串变量覆盖该模板中的当前Smarty变量值


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


仅创建正确类型的新对象不会改变现有呈现代码的功能-您需要对实际用于显示页面的对象进行赋值。

“我发现在单击/加载单独页面后无法动态修改模板”这意味着什么?您清楚地知道PHP正在服务器端运行,并且在将页面发送到客户端后无法修改页面。。。你到底想干什么?如果要更改该值,只需指定一个新值。@Brad Yes,但每次单击该部分时,该函数都会被调用-我想检查用户是网站的哪个部分(我正在执行上述操作),并修改smarty变量并重新发送模板。在这里,我似乎根本无法访问/修改smarty变量..你把smarty display()的顺序放在哪里,放在那段PHP之前还是之后?@user2369736,你把我和这个用户搞混了。让我们简化一下。客户端请求一个页面。你到底想做什么?您已经在为该模板分配数据,只需分配所需的值即可。@Brad我要检查
$this->nameWS
,我在上面执行了此操作,并根据返回的两个字符串之一,相应地更改
zone.tpl
中的NoVersion smarty变量。我假设我的最后一行确实给出了
NoVersion
字符串值,但似乎什么也没有发生。就是这样,我似乎找不到smarty文档来说明如何访问特定模板并修改该模板上的变量though@user2369736Smarty是一个渲染引擎:给它一个模板文件和一组变量,它呈现一些HTML(或模板中的任何内容)。没有中央注册中心知道将要使用哪些模板,您必须找到使用这些模板的代码。