Smarty foreach 不工作

Posted

技术标签:

【中文标题】Smarty foreach 不工作【英文标题】:Smarty foreach not working 【发布时间】:2012-09-27 14:31:49 【问题描述】:

我正在用 Smarty 做一些实验,但我在使用 foreach 循环时遇到了问题,它不起作用,我不明白为什么。这是我的代码:

默认.tpl

    <select name="user">
    html_options values=$id output=$names selected="5"
</select>

<table>
foreach $names as $name
strip
   <tr bgcolor="cycle values='#eeeeee,#dddddd'">
      <td>$name</td>
   </tr>
/strip
/foreach
</table>

<table>
foreach $users as $user
strip
   <tr bgcolor="cycle values='#aaaaaa,#bbbbbb'">
      <td>$user.name</td>
      <td>$user.phone</td>
   </tr>
/strip
/foreach
</table>

和default.php

<?php

include('Smarty.class.php');

//create object
$smarty = new Smarty;

$smarty->template_dir = 'C:\xampp\htdocs\smarty\templates';
$smarty->config_dir = 'C:\xampp\htdocs\smarty\config';
$smarty->cache_dir = 'C:\xampp\php\smarty\cache';
$smarty->compile_dir = 'C:\xampp\php\smarty\templates_c';

$smarty->assign('names', array('Bob', 'Jimmy', 'Freddy', 'Walter', 'Jerry'));

$smarty->assign('users', array(
                        array('name' => 'bob', 'phone' => '555-3425'),
                        array('name' => 'jim', 'phone' => '555-4364'),
                        array('name' => 'joe', 'phone' => '555-3422'),
                        array('name' => 'jerry', 'phone' => '555-4973'),
                        array('name' => 'fred', 'phone' => '555-3235')
));

//display information
$smarty->display('default.tpl');
?>

测试时出现以下错误:

致命错误:Smarty 错误:[在 default.tpl 第 16 行]:语法错误:无效属性名称:'$names'(Smarty_Compiler.class.php,第 1550 行)在 C:\xampp\php\Smarty\libs \Smarty.class.php 在第 1094 行。

同样的情况也发生在 $users 身上。因为我知道这些值正在传递,因为它正在工作,所以我无法理解发生了什么。

提前谢谢。

编辑:我从 smarty 网站上拿了这个例子。

【问题讨论】:

您使用的是 Smarty3 引入的语法,但实际上是在运行 Smarty2。要么升级到 Smarty3(3.1.12 是当前版本),要么将你的 foreach 更改为 foreach from=$users item=user 【参考方案1】:
foreach name=$names
.
.
.
.
<td> $name </td>

这就是它的工作原理。我从未尝试过你在 smarty 中使用 foreach 的方式。

【讨论】:

它告诉我它缺少“from”属性。我添加了“来自”和“项目”,现在它正在运行。他们网站上的信息不正确。【参考方案2】:

看来 smarty 网站上的示例不起作用。这是我必须做的才能让它工作:

    <table>
    foreach from=$names item=name
    strip
       <tr bgcolor="cycle values='#eeeeee,#dddddd'">
          <td>$name</td>
       </tr>
    /strip
    /foreach
</table>

<table>
    foreach from=$users item=user
    strip
       <tr bgcolor="cycle values='#aaaaaa,#bbbbbb'">
          <td>$user.name</td>
          <td>$user.phone</td>
       </tr>
    /strip
    /foreach
</table>

【讨论】:

可能是因为您使用了其他版本的 smarty??比编写教程的那个。 smarty 3 有很多变化。 我正在使用 Smarty 2.6.27,我不想下载 smarty 3,因为我将在工作中处理 2.6。

以上是关于Smarty foreach 不工作的主要内容,如果未能解决你的问题,请参考以下文章

smarty foreach循环

如何在 smarty 中找到 foreach 循环的最后一个索引

Smarty - foreach 循环 10 次并停止

数字格式在 Smarty 的 foreach 中不起作用

foreach和section的区别

smarty中增加类似foreach的功能自动加载数据方法