2013-05-10 119 views
0

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

+0

“我发现无法在单独页面的点击/加载后动态修改模板”这是什么意思?您清楚地知道PHP正在运行服务器端,并且在发送给客户端后您无法修改页面......您究竟在做什么?如果您想更改该值,只需指定一个新值。 – Brad 2013-05-10 14:28:33

+0

@Brad是的,但每次我点击部分,这个函数被调用 - 我想检查用户是哪个部分的网站(我在上面做的),并修改smarty变量并重新发送模板。我似乎无法在这里实际访问/修改smarty变量.. – user2381114 2013-05-10 14:29:33

+0

您在哪里放置了那条PHP之前或之后的smarty display()命令? – Borgtex 2013-05-10 14:43:31

回答

0

$tplContent对象可能代表一个模板,或者准备一个变量(它不会出现真正从一个Smarty对象的后代),但无处在你的代码粘贴好你展示,你实际上将该模板呈现为HTML。

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

+0

就是这样 - 我似乎无法找到smarty文档显示如何访问特定模板并修改该模板上的变量,尽管 – user2381114 2013-05-10 14:34:14

+0

@ user2369736,只需指定一个不同的值... – Brad 2013-05-10 14:44:42

+0

@ user2369736 Smarty是一个渲染引擎:你给它一个模板文件和一组变量,它呈现一些HTML(或者模板中的任何东西)。没有中央注册局知道要使用哪些模板,您必须找到使用它们的代码。 – IMSoP 2013-05-11 09:23:00