Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Smarty: Problemsammelthread (https://boardunity.de/smarty-problemsammelthread-t2790.html)

MrNase 01.02.2005 09:53

Smarty: Problemsammelthread
 
Hallo,

Ich kämpfe mich grad durch Smarty und bin auf ein Problem gestossen:

In meiner php-Datei steht:
Code:

    $result = $db->query("SELECT * FROM user");
    $smarty->assign("data", $row = $db->fetch($result));

im Templates steht:
Code:

    <ul>
    {foreach from=$data item=user}
            <li>{$user}</li>
    {/foreach}
    </ul>

Dies gibt beim Aufruf aber alle Spalten der Tabelle user weiter.. Ich will aber nur den Benutzernamen (also normalerweise $row['username']) haben.

Ich hab es schon mit
Code:

    <ul>
    {foreach from=$data item=user}
            <li>{$user['username']}</li>
    {/foreach}
    </ul>

probiert aber ganz offensichtlich geht es nicht :(


Eigentlich komme ich nur zum erwünschten Ergebnis wenn ich die Query ändere und aus dem * ein username mache, aber das ist nicht Sinn der Sache.


Wenn ich nun im Template folgendes schreibe:
Code:

  <ul>
  {foreach from=$data item=user}
          <li>{$user.username}</li>
  {/foreach}
  </ul>

schaut die Ausgabe wie folgt aus:
Code:

  <ul>
          <li>1</li>
        <li>t</li>
        <li>t</li>
        <li>t</li>
 </ul>


exe 01.02.2005 15:56

Wenn ich dich richtig verstanden habe, willst du eine Liste aller Benutzer(namen) ausgeben. Dabei musst du erstmal in deinem PHP-Script alle Benutzernamen auslesen, in ein Array schreiben und das Array an Smarty übergeben. Dort kannst du es dann mit foreach oder section durchgehen und ausgeben.

PHP-Code:

$result $db->query("SELECT username FROM user");
$users  = array();

while(
$row $db->fetch($result))
{
    
$users[] = $row['username'];
}

$smarty->assign('data'$users); 

Im Template dann foreach oder section:

Code:

<ul>
  {foreach from="$data" item="user"}
  <li>{$user}</li>
  {/foreach}
</ul>

bzw.

Code:

<ul>
  {section name="idx" loop="$data"}
  <li>{$data[idx]}</li>
  {/section}
</ul>

Wenn ich jetzt keinen Fehler gemacht habe sollte das so funktionieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:34 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25