2017-03-02 21 views
0

こんにちは私は、サイズとタイムスタンプを持つファイルのリストを表示するフォームを作成しようとしており、ユーザーがそれらをダウンロードするために1つ以上のファイルを選択しています。Perl CGIフォームの出力

@filesは、ファイルのリストが含まれている
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; 

私は と %をダウンロードすることもできますがの名前をラベル: 私は、フォームを見て、このように、各ファイルに関連するファイル名のサイズとタイムスタンプを含めるためにハッシュを使用しました


filename1.zip:これは私が有効な出力を得る正常に動作しますが、読んで非常に素晴らしいではありませんサイズとタイムスタンプ

ファイルは、以下の例を参照してくださいサイズ:61.33メガバイト[62799]タイムスタンプ:2017-02-22T07:13:00

filename2.txtサイズ:62.52メガバイト[64020]タイムスタンプ:2017-02-22T07:13:00

filename000003.logサイズ:73.27メガバイト[75033]タイムスタンプ:2017-02-22T06:00:00

file4.tarサイズ:63.46メガバイト[64982]タイムスタンプ:2017-02-22T05:59:00


それは非常にコンパクトで、ユーザーにとって最適ではありません。これは、ファイル名の1列とファイルのチェックボックスの1つの表に表示される方法ですサイズとタイムスタンプのために1つ、または3つの情報を別の色/フォントで表示することもできます。各ファイルのサイズとともに@size、各ファイルのタイムスタンプを持つ@timeを利用できます。 @file [1]などに対応

+3

テーブルを作成して、テーブルを生成するときにループ内の各行に1つのチェックボックスを挿入するだけです。 – choroba

+0

私はperlの専門家ではないので、おそらく私は何か明白な行方不明ですが、どのようにフォーム/チェックボックス内にテーブルを置いてユーザの選択肢を読むのですか? – Cris

+2

Perlに問題はありません。あなたはCGI.pmの古いHTML生成物を使用していますが、これは廃止され、独自のパッケージに移されました。 CGI.pm自体はコアから削除されており、著者はそれがプライムを過ぎていることを示唆しています。とにかく、HTML生成物を使わないでください。適切なテンプレートエンジンを使うか、それがオプションでない場合は、あなた自身でHTMLを書いて 'print'してください。読みやすく、コードも簡単です。 – simbabque

答えて

0

テーブルを作成して、テーブルを生成する際にループの各行に1つのチェックボックスを挿入するだけです。

#!/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; 
関連する問題