大家好我正在尝试编写一个显示文件列表及其大小和时间戳的表单,并让用户选择一个或多个文件来下载它们。 我使用hash来包含与每个文件相关的文件名大小和时间戳,表单如下所示:
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列,文件大小为1,时间戳为1,甚至显示3不同颜色/字体的信息,我最终得到1个数组@size与每个文件的大小和另一个@time与每个文件的时间戳,显然@size [1]对应@files [1]等等
答案 0 :(得分: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;