1

我从我的 SQL 中存储了不同的数据数组:

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,我想显示所有其他字段。

我已经在模板文件中添加了这样的代码。我得到了表格格式。但是这些值以错误的方式输入到每一列中。

<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>

有人可以纠正这个吗?

4

2 回答 2

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 -%]

希望这会有所帮助。可惜的是,决定变量的命名约定并坚持下去。正如一位程序员曾经对我说的那样:“糟糕的标准比不断变化的标准要好。” :-)

于 2013-05-14T05:59:40.640 回答
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 %]

但是是提供一个空白页

于 2013-05-14T09:43:16.313 回答