2017-03-02 133 views
0

大家好我试图写一个窗体显示文件的大小和时间戳列表,并让用户选择一个或多个文件来下载它们。 我用散列以包括与每个文件的形式看起来像这样的文件名的大小和时间戳:Perl的CGI表格输出

print $q->start_form(
     -name => 'main_form', 
     -method => 'GET', 
     -enctype => &CGI::URL_ENCODED, 
     -onsubmit => '', 
     -action => 'download_form.cgi', # Defaults to the current program 
    ); 
    print $q->checkbox_group(
     -name  => 'file', 
     -values => \@files, 
     -defaults => [''], 
     -labels  => \%labels, 
     -columns => 1, 
     -rows  => 1500, 
    ); 

    print $q->submit(
     -name  => 'submit_form', 
     -value => 'Download', 
     -onsubmit => '', 
    ); 
print $q->end_form; 

凡 @files包含文件的列表,我可能要下载 和 %标签的名称文件大小和时间戳

这工作得很好,我得到一个有效的输出,但不是很好看,见下面的例子:


filename1.zip大小:61.33MB [62799]时间戳:2017-02-22T07:13:00

filename2.txt大小:62.52MB [64020]时间戳:2017-02-22T07:13:00

filename000003.log大小:73.27MB [75033]时间戳:2017-02-22T06:00:00

file4.tar大小:63.46MB [64982]时间戳:2017-02-22T05:59:00


它是非常紧凑的,对用户来说不是最佳的,有没有办法让它显示在一个表中,其中1列用于文件名,复选框用于文件大小和一个为时间戳,甚至显示在不同的颜色/字体的3信息,我最终可用1阵列@size与每个文件的大小和另一@time与每个文件的时间戳,显然@size [1]对应于@files [1]等

+3

只需创建一个表,并在生成表时在循环中的每一行中插入一个checkox。 – choroba

+0

我不是Perl的专家,所以可能我错过了一些显而易见的事情,但我如何将表格放在窗体/复选框中来阅读用户的选择? – Cris

+2

您没有Perl问题。您正在使用来自CGI.pm的过时的HTML代码,它已被弃用并被移到它自己的包中。 CGI.pm本身已经从核心中移除,其作者认为它已经过去了。无论如何,不​​要使用HTML代的东西。要么使用适当的模板引擎,要么不是这个选项,只需要自己写HTML,然后'打印'。阅读起来更容易,代码更少。 – simbabque

回答

0

只需创建一个表,并在生成表时在循环中的每一行中插入一个checkox。

#!/usr/bin/perl 
use warnings; 
use strict; 
use feature qw{ say }; 

use CGI; 

my %labels = (file1 => { size  => '61.33MB', 
          bytes  => 62799, 
          timestamp => '2017-02-22T07:13:00', 
         }, 
       file2 => { size  => '62.52MB', 
          bytes  => 64020, 
          timestamp => '2017-02-22T07:13:00', 
         }); 


my $q = 'CGI'->new; 
print $q->header; 
print $q->start_html; 

print $q->start_form; 
print $q->table({-border => 1}, 
    map { 
     my $filename = $_; 
     $q->Tr, 
     $q->td(
      $q->checkbox('files', 0, $filename, $filename) 
     ), 
     map $q->td($labels{$filename}{$_}), qw(size bytes timestamp) 
    } sort keys %labels 
); 

print $q->submit; 

print $q->end_form;