通过配置文件在smarty中定义数组

时间:2009-11-07 13:55:26

标签: php smarty

是否可以在smarty中的配置文件中定义数组?例如,我想在配置文件(位于/ configs)中有小数据库 - 很少(约20个)产品描述:标题,价格,描述。之后我想通过foreach或section列出它。 如何在没有MySql或其他数据库引擎的情况下在Smarty中定义该数组。我能这样做吗?

5 个答案:

答案 0 :(得分:6)

您可以在配置文件中定义数组,您需要设置$ config_overwrite = FALSE。 你可以看看这个页面:config_overwrite

$smarty = new Smarty;
$smarty->config_overwrite=false; 

配置文件。

   # row colors
rowColors = #FF0000
rowColors = #00FF00
rowColors = #0000FF

带有{section}循环的模板。

 <table>
  {section name=r loop=$rows}
  <tr bgcolor="{cycle values=#rowColors#}">
    <td> ....etc.... </td>
  </tr>
  {/section}
</table>

答案 1 :(得分:1)

聪明的论坛上有人找到了办法。参见:

http://www.smarty.net/forums/viewtopic.php?p=61528

答案 2 :(得分:0)

我看了一下Smarty文档,特别是this页面。

我没有看到在这里初始化数组的示例,我怀疑Smarty不支持在其配置文件中初始化数组,因为配置文件似乎是简单的键值存储。您当然可以尝试在配置文件中初始化一个数组,并告诉我们它是否适合您。

在其他Smarty文档页面上,初始化数组的首选位置在.php页面中,该页面用于初始化值并在显示之前将它们加载到模板中。

答案 3 :(得分:0)

再次,因为形成:

似乎是真的。那里没有定义数组的可能性。我尝试了所有的东西......最后我使用了来自控制器的assign数组(正如你的建议):

php:

$smarty->assign('list', array(1,2,3,4)); 

product.conf

[1]
client=
url=
price=
description=

[2]
client=
url=
price=
description=

[3]
client=
url=
price=
description=

[4]
client=
url=
price=
description=

tpl:

{foreach from=$list item=current name=prod}
{config_load file='product.conf' section=$current}

{$smarty.config.client}
{$smarty.config.url}
{$smarty.config.price}
{$smarty.config.description}

{/foreach}

答案 4 :(得分:0)

有什么理由要求聪明地完成这项工作吗?如果您只是在PHP中创建数组并传递给smarty变量,那么它似乎更具有前瞻性。这样一来,如果您不再使用smarty,那么所有数据仍可通过任何重新编码进行访问。