2013-05-13 66 views
1

我從我的SQL存儲的數據的不同排列來顯示錶數據的數組:想使用模板文件中的Perl

push(@bugid,$bug_id); 
push(@assign,$assignd_to); 
push(@stat,$stats); 
push(@res,$resol); 
push(@rat,$rate); 
push(@sev,$prior); 
push(@op,$o_p); 
push(@shrt,$shor_desc); 

$vars->{'bugid'}= \@bugid; 
$vars->{'Ticket'}= $ticket_no; 
$vars->{'Assigne'}= \@assign; 
$vars->{'stats'}= \@stat; 
$vars->{'resoltion'}= \@res; 
$vars->{'rate'}= \@rat; 
$vars->{'priorty'}= \@sev; 
$vars->{'opsys'}= \@op; 
$vars->{'shrtdesc'}= \@shrt; 

而且我通過這一個模板文件像下面顯示的目的:

$template->process('reports/gayathri_old-ticketlist.html.tmpl', $vars) 
    || ThrowTemplateError($template->error()); 

而我想在表格中顯示細節。 即,對應於每個bugid,我想顯示所有其他字段。

我在模板file.i中添加了這樣的代碼,我得到了表格格式,但是這些值以錯誤的方式輸入到每一列中。

<table border='1' bgcolor='#eefff3'> 

<tr><td><b>BUG ID</b></td> 
<td><b>TICKET NO</b></td> 
<td><b>ASSIGNED TO</b></td> 
<td><b>BUG STATUS</b></td> 
<td><b>RESOLUTION</b></td> 
<td><b>RATING</b></td> 
<td><b>PRIORITY</b></td> 
<td><b>OP-SYS</b></td> 
<td><b>SHORT DESCRIPTION</b></td></tr> 
[% FOREACH Assigne = Assigne %] 
[% FOREACH stats = stats %] 
[% FOREACH resoltion = resoltion %] 
[% FOREACH rate = rate %] 
[% FOREACH priorty = priorty %] 
[% FOREACH opsys = opsys %] 
[% FOREACH shrtdesc = shrtdesc %] 
[% FOREACH bugid = bugid %] 

<tr> 
    <td> 
     &nbsp; <A HREF="show_bug.cgi?id=[% bugid %]"> [% bugid %] </A><br> 
    </td> 

    <td> 
    &nbsp; [% Ticket %] 
</td> 

<td> 
    &nbsp; [% Assigne %] 
</td> 

    <td> 
    &nbsp; [% stats %] 
    </td> 
    <td> 

    &nbsp; [% resoltion %] 

    </td> 
    <td> 

    &nbsp; [% rate %] 

    </td> 
    <td> 

    &nbsp; [% priorty %] 

    </td> 
    <td> 

    &nbsp; [% opsys %] 

    </td> 
    <td> 

    &nbsp; [% shrtdesc %] 

    </td> 
</tr> 
    [% END %] 
[% END %] 
    [% END %] 
    [% END %] 
    [% END %] 
    [% END %] 
    [% END %] 
    [% END %] 
    </table> 

有沒有人可以糾正這個?

+0

可以在任何一個請回復這個,因爲這是非常緊急的...... – 2013-05-14 04:16:43

回答

1
my @items; 
while(my($bug_id,$icket_no,$assignd_to,$stats,$resol,$rate,$prior,$o_p,$shor_desc) 
=$sth->fetchrow_array()) { 
my $item = { 
bugid => $bug_id, 
ticket => $icket_no, 
assign_to => $assignd_to, 
status => $stats, 
resolution => $resol, 
priority => $prior, 
opsys => $o_p, 
shortdesc => $shor_desc, 
}; 
push(@items, $item); 
} 
$vars-> {items} = \@items; 

然後傳遞到模板文件,

$template->process('reports/gayathri_old-ticketlist.html.tmpl', $vars) 
|| ThrowTemplateError($template->error()); 
在模板文件

然後:

<b>Bugs Corresponding to ticket no :[% item.ticket %]</b><br> 
<br> 

<table border='1' bgcolor='#eefff3'> 

    <tr><td><b>BUG ID</b></td> 
<td><b>TICKET NO</b></td> 
    <td><b>ASSIGNED TO</b></td> 
    <td><b>BUG STATUS</b></td> 
<td><b>RESOLUTION</b></td> 
<td><b>RATING</b></td> 
<td><b>PRIORITY</b></td> 
<td><b>OP-SYS</b></td> 
<td><b>SHORT DESCRIPTION</b></td></tr> 

[%- FOREACH item in items -%] 
<tr> 
    <td> 
     <a href="show_bug.cgi?id=[% item.bugid %]"> [% item.bugid %] </a><br> 
     &nbsp; [% item.ticket %]<br/> 
     &nbsp; [% item.assign_to %] <br/> 
     &nbsp; [% item.status %] <br/> 
     &nbsp; [% item.resolution %] <br/> 
     &nbsp; [% item.priority %] <br/> 
     &nbsp; [% item.opsys %] <br/> 
     &nbsp; [% item.shortdesc %] <br/> 

     </td> 
    </tr> 
    [%- END -%] 

</table> 

[% PROCESS global/footer.html.tmpl %] 

但就是在提供一個空白頁

+0

爲什麼這會顯示一個空白頁 – 2013-05-14 09:44:16

+0

爲什麼在項目循環中的'FOREACH項目之外引用'item.ticket'? 'item'在那裏沒有範圍。我會在循環前添加一個'[%items.size%]'的顯示,以確認'$ vars - > {items}'>> 0並確實包含循環可以迭代的集合。 – RET 2013-05-14 21:16:52

4

所有嵌套的FOREACH語句都將在循環內創建循環。我會說這就是爲什麼你沒有得到你想要的輸出。我不確定重新定義變量(FOREACH bugid = bugid等)的影響是什麼。

的數據設計是可怕的,但你可以使用它,做這樣的事情:

[%- SET i = 0; 
    WHILE i < bugid.size; -%] 
<tr> 
    <td> 
     <a href="show_bug.cgi?id=[% bugid.$i %]"> [% bugid.$i %] </a><br> 
     &nbsp; [% Assigne.$i %]<br/> 
     ...etc 
    </td> 
</tr> 
[%-  SET i = i + 1; 
    END -%] 

......通過這些陣列一個所有元素有效地迭代,並使用順序位置爲全部爲其中。對於數組中的第一個元素,bugid.$i解析爲bugid.0

但我不會那樣做。

我會生成原始數據作爲hashrefs數組,然後遍歷它們。

== == Perl的

my @items; 

# in some loop 
my $item = { 
    bugid => $bugid, 
    assign_to => $assign_to, 
    status => $stat, 
    ..etc 
}; 
push @items, $item; 
# end of loop 

$vars->{items} = \@items; 

== ==模板

[%- FOREACH item in items -%] 
    <tr> 
     <td> 
      <a href="show_bug.cgi?id=[% item.bugid %]"> [% item.bugid %] </a><br> 
      &nbsp; [% item.assign_to %]<br/> 
      ...etc 
     </td> 
    </tr> 
[%- END -%] 

希望這是有幫助的。可惜的是,爲你的變量決定一個命名約定並堅持下去。正如一位程序員曾經對我說的那樣:「一個糟糕的標準比一個不斷變化的標準更好。」 :-)

+2

我已經這樣做了。但它顯示出空白值。 – 2013-05-14 09:19:11

+1

我做了這樣的如下: – 2013-05-14 09:20:32

+0

但它顯示空頁 – 2013-05-14 09:46:48