2011-10-13 57 views
1

我需要顯示查詢的結果(mysql),我怎樣才能循環記錄集,而不需要將值賦給數組? 現在我做:如何使用Smarty打印記錄集?

while($row = $this->mysql->fetch($rs)){ 
    val[] = $row 
} 
$this->smarty->assign('val', val); 

然後(在template.tpl)

{section name=nr loop=$val} 
{$val[nr].cod}<br /> 
{sectionelse} 
<h1>No record</h1> 
{/section} 

我如何優化呢?

回答

1

您可以使用Smarty的的foreach,雖然它並不能使它更短:

{if $val} 
    {foreach from=$val item=nr} 
     {$nr.cod}<br /> 
    {/foreach} 
{else} 
    <h1>No record</h1> 
{/if} 
+0

不,我問如何顯示「記錄集」(我的記錄集),你可以看到我將行保存在一個數組中,我需要這樣做嗎?我能否直接打印記錄集? – Dail

+0

@Dail除非在Smarty模板中嵌入PHP代碼,否則不能將其保存到數組中而不打印記錄集。這是不受歡迎的做法。首先將它存儲到數組是處理它的正確方法。 –

+0

@Michael,這不慢嗎? – Dail

0

也許{html_table}可以提供幫助。否則,你可以自由地重複你的行列數,只要你喜歡:

{foreach $val as $row} 
    {if [email protected]} 
    <table> 
    <tbody> 
    {/if} 
    {foreach $row as $cell} 
     {if [email protected]} 
     <tr> 
     {/if} 

     <td>{$cell|escape:"html}</td> 

     {if [email protected]} 
     </tr> 
     {/if} 
    {foreach} 
    {if [email protected]} 
    </tbody> 
    </table> 
    {/if} 
{foreachelse} 
    <p>No Data</p> 
{/foreach} 

(的{foreach} Smarty3語法)

您也可以輸出細胞鍵:

{foreach $val as $row} 
    {if [email protected]} 
    <table> 
    <thead> 
    <tr> 
    {foreach $row as $cell} 
     <th>{[email protected]|escape:"html}</th> 
    {/foreach} 
    </tr> 
    </thead> 
    <tbody> 
    {/if} 
    {foreach $row as $cell} 
     {if [email protected]} 
     <tr> 
     {/if} 

     <td>{$cell|escape:"html}</td> 

     {if [email protected]} 
     </tr> 
     {/if} 
    {foreach} 
    {if [email protected]} 
    </tbody> 
    </table> 
    {/if} 
{foreachelse} 
    <p>No Data</p> 
{/foreach}