smarty为单个记录分配列名变量和值

时间:2014-08-16 12:07:03

标签: php mysql smarty

我对Smarty很新,所以请放轻松我,我看到一个人说请参阅常见问题解答,但是,我在常见问题解答链接或我花了几个小时搜索的其他地方找不到这个,谢谢:

我看到很多帖子指的是如何遍历从mysql查询返回的一堆行。我想知道是否有一种方法来分配变量和名称,而无需在显示smarty模板之前在PHP端输入所有变量和名称。例如:

mysql query returns a single row of data which has columns username, fname, lname (and a bunch of others): 
$qry="SELECT * FROM people WHERE username='$username'";
$result=mysql_query($qry);

所以如果我不单独分配每个,就像这样:

$peoples = mysql_fetch_assoc($result);
$username=$peoples['username'];
$fname=$peoples['fname'];
$lname=$peoples['lname'];

......等等,然后:

$smarty->assign('username', $username);
$smarty->assign('fname', $fname);
$smarty->assign('lname', $lname);

......等等,然后:

$smarty->display('templates/person.tpl');

并使用{$ username} {$ fname} {$ lname}等等 在模板中。有没有办法从mysql_fetch_assoc遍历关联的数组并自动分配这些变量和智能变量?

我看到了类似的东西:

   while($row   = mysql_fetch_assoc($result)) {
      $this->append("peoples", $row);
      $rows[] = $row;
   }

但它似乎没有做我要求的事情,而且我真的不明白如何达到我所需要的,请帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您只想要第一行:

// php
$person = mysql_fetch_assoc($result);
$smarty->assign('person', $person);

// tpl
{{$person.fname}}

如果你想要所有人:

// php
$people = array();
while ( $person = mysql_fetch_assoc($result) ) {
  $people[] = $person;
}
$smarty->assign('people', $people);

// tpl
{{foreach from=$people item=person}}
  - {{person.fname}}
{{/foreach}}