Smarty foreach循环
问题描述:
我有smarty的问题,实际上我无法从数据库收集循环数据。Smarty foreach循环
这是getreputation功能
function getreputation($username)
{
global $rDB;
$rows = $rDB->select('
SELECT *
FROM account_reputation
WHERE username=?
ORDER BY id DESC
',
$username
);
foreach($rows as $row)
{
$reputation = array();
$reputation['user'] = $row['username'];
$reputation['reputation'] = $row['reputation'];
$reputation['action'] = $row['reason'];
$reputation['date'] = $row['date'];
}
return $reputation;
}
下面是我给你这个功能TPL
$smarty->assign('reputation', getreputation($page['username']));
而且finaly这是foreach循环
{foreach from=$reputation item=reputation}
<tr><td width="33%"><center>
{if $reputation.action == 1}Registering an account
{elseif $reputation.action == 2}Daily visit
{elseif $reputation.action == 3}Posting a comment
{elseif $reputation.action == 4}Your comment was voted up (each upvote)
{elseif $reputation.action == 5}Submitting a screenshot
{elseif $reputation.action == 6}Submitting a guide (approved)
{elseif $reputation.action == 7}Earning a <font color="brown">Copper</font> <a href="/?website-achievements">website achievement</a>
{elseif $reputation.action == 8}Earning a Silver <a href="/?website-achievements">website achievement</a>
{elseif $reputation.action == 9}Earning a <font color="gold">Gold</font> <a href="/?website-achievements">website achievement</a>
{else}Achievement not found
{/if}
</center></td><td width="33%">
<center><font color='green'>+{$reputation.reputation}
</font></center></td><td width="33%"><center>
{$reputation.date}
</center></td></tr>
{/foreach}
所有我能看到是
因此,foreach的输出是完全错误的 有人可以帮助我解决这个问题吗?
答
首先,您在此处发布的PHP函数永远不会返回多行,因为您一直覆盖$reputation
的值。
function getreputation($username) {
global $rDB;
$rows = $rDB->select('SELECT * FROM account_reputation WHERE username=? ORDER BY id DESC', $username);
// Initialize the array that will be filled with the single rows
$reputation = array();
foreach($rows as $row) {
// Create a temporal variable with a different name
$rep = array();
$rep['user'] = $row['username'];
$rep['reputation'] = $row['reputation'];
$rep['action'] = $row['reason'];
$rep['date'] = $row['date'];
// Add this array to the other one
$reputation[] = $rep;
}
return $reputation;
}
然后,在你的Smarty代码,你应该使用不同的变量名称为当前项目(由迈克尔Berkowski建议):
{foreach from=$reputation item=rep}
<tr><td width="33%"><center>
{if $rep.action == 1}Registering an account
{elseif $rep.action == 2}Daily visit
etc...
{else}Achievement not found
{/if}
</center></td>
<td width="33%"><center><font color='green'>+{$rep.reputation}
</font></center></td>
<td width="33%"><center>{$rep.date}</center></td>
</tr>
{/foreach}
使用不同的变量为'项目'。 '{foreach from = $ reputation item = rep}'并在循环中作为'$ rep.action'访问。 – 2013-02-16 12:48:39
您是否通过Smarty模板中的某个地方的{debug}检查了“信誉”的价值? – Niko 2013-02-16 12:49:05
@Niko是的,我检查,一切都加载到tpl,因为它应该在foreach中的问题 – 2013-02-16 12:54:47