Smarty foreach循环

时间:2013-02-16 12:44:46

标签: php mysql foreach smarty

我有smarty的问题,实际上我无法循环从数据库收集的数据。

这是 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']));

最后这是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}

我只能看到 Main site output of foreach

因此,foreach的输出是完全错误的 有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

首先,您在此处发布的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代码中,您应该为当前项目使用不同的变量名称(由Michael 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}