使用Javascript动态更改smarty包含文件

时间:2012-05-10 07:59:52

标签: javascript smarty

我的smarty文件中有两个标签。在tab1中,我有一个下拉菜单,其中包含城市列表。我有基于城市的模板列表,它包含有关城市的详细信息。在第二个标签中,我应该根据下拉选项显示相关的城市模板。

例如: 下拉:

<select name='city' id='city' class="medium" style="float:left" onchange="setCityTpl(this);">
<option value=''></option>
{html_options options=$city_filter selected=$city.name}
</select>

如果我在下拉菜单中选择城市1

我应该将smartl包含文件中的tpl名称设置为city1.tpl

<div id="tab2" class="tab-content" style="display: none; visibility: hidden; padding-top:0px">
{include file=city1.tpl}
</div>

如果我在下拉菜单中选择城市2

我应该在smarty包含文件中将tpl名称设置为city2.tpl

<div id="tab2" class="tab-content" style="display: none; visibility: hidden; padding-top:0px">
{include file=city2.tpl}
</div>

2 个答案:

答案 0 :(得分:2)

您可以从javascript加载网址。所以我认为如果用户从Dropdown1中选择City1,你的JS将加载city1.tpl而City2将加载city2.tpl

或者您可以执行以下操作:js脚本使用带有“city1”或“city2”的POST / GET值调用url(selected-city.php)。 selected-city.php使用名为selected-city.tpl的参数(取自POST / GET)和您的tpl检索selected

<div id....>
{include file=${selected}.tpl}
</div ...>

答案 1 :(得分:1)

smarty是基于php的模板引擎,这意味着它在服务器端上运行,而javascript在客户端(用户的浏览器)上运行。因此,在用户实际看到您的页面之前,智能模板已经完成处理并且已经完成了任何包含。

要实现您的目标,一种方法是包含所有文件并隐藏相应的html元素(例如display:none)。然后,根据用户的选择,您将显示您希望的元素(在您的情况下第二个下拉