2017-03-02 87 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;