【问题标题】:How can I dynamically generate an HTML tables containing 100 rows each in Perl?如何在 Perl 中动态生成包含 100 行的 HTML 表格?
【发布时间】:2010-11-03 05:43:28
【问题描述】:
use POSIX;
my $test = "";
my $elements = scalar(@array);
my $tablecount = ($elements / 100);
my $tblnum = ceil($tablecount);
my @hundred;
 foreach $test (@array) {
   until ($tblcnt == $tblnum){
   @hundred(@array, 0, 99);
   print qq~<table id="$tblcnt"><tr><td>~;
     foreach $test (@hundred){
     print qq~<tr><td>$test</td></tr>~;
     }
   print qq~</table>~;
   $tblcnt++;
   }
}

UG!!!我正在努力学习这个,但是,我就是做错了!!!

我正在尝试动态生成“x”个 html 表格,每个表格最多填充 100 行数据。

我可以获得所需的表数,我可以循环,我可以添加,但是有一点是肯定的:我不能写代码。

这是想要的结果:

1- 我有一个数组中的 1027 行数据。

2- 我希望我的脚本制作 11 个 html 表格,每个表格最多 100 行。 ((实际上是图层)默认情况下通过 css 是不可见的。这样我可以在表格上做一些显示隐藏,比如“下一个上一个”导航。我不需要跨浏览器 css 的帮助。)

3-如果有更好的方法,一种我无论如何都能理解的方法,除了使用visible=方法,请详细说明!

我放弃了让 Perl 制作 100 页的“下一个上一个”链接到数据的页面,所以我求助于使用 css javascript onclick=yadayada 来“显示数据”。

我认为在循环中移出 100 行数组并将这些行放在他们自己的 html 表中会更容易。没有。

我失败得很惨,需要帮助。

【问题讨论】:

    标签: perl dynamic-data


    【解决方案1】:

    我认为在编写任何脚本之前,您需要花更多时间学习 Perl 和 CGI​​ 的基础知识。

    在 CGI 脚本中将逻辑与表示分离很有用。为此,我发现HTML::Template 非常有用。

    以下脚本将生成一个 HTML 文档,其中包含 100 个表格,每个表格有 100 行,每行 10 个单元格。这样做会花时间。

    #!/usr/bin/perl
    
    use strict; use warnings;
    
    use CGI::Simple;
    use HTML::Template;
    
    my $tmpl = HTML::Template->new(scalarref => page_template() );
    
    my @tables;
    
    for my $t (1 .. 100) {
        my @rows;
        for my $r (1 .. 100) {
            push @rows, { CELLS => [ map { CELL => $_ }, 1 .. 10 ] };
        }
        push @tables, { ID => "table_$t", ROWS => \@rows }
    }
    
    $tmpl->param(TABLES => \@tables);
    
    my $cgi = CGI::Simple->new;
    
    print $cgi->header('text/html');
    $tmpl->output(print_to => \*STDOUT);
    
    sub page_template {
        return \ <<EO_TMPL
    <!DOCTYPE HTML>
    <html>
    <head><title>Tables Example</title></head>
    <body>
    <TMPL_LOOP TABLES>
    <table id="<TMPL_VAR ID>">
    <TMPL_LOOP ROWS>
    <tr>
    <TMPL_LOOP CELLS>
    <td><TMPL_VAR CELL></td>
    </TMPL_LOOP>
    </tr>
    </TMPL_LOOP>
    </table>
    </TMPL_LOOP>
    </body>
    </html>
    EO_TMPL
        ;
    }
    

    【讨论】:

      【解决方案2】:
      my $cnt = 0;
      
      while (@array) {
          my @rows = splice @array, 0, 100;
          print qq(<table id="t$cnt">\n);
          for my $row (@rows) {
              print "<tr><td>$row</td></tr>\n";
          }
          print "</table>\n";
          ++$cnt;
      }
      

      您可能希望使用HTML::Table 来生成 HTML。

      【讨论】:

      • 完美,除了我用 splice(@array, 0, 100);并改为打印qq~~;
      猜你喜欢
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 2012-05-13
      • 2013-02-19
      • 2013-09-22
      • 1970-01-01
      相关资源
      最近更新 更多