Thread Select Liste ...: HTML::Template
(14 answers)
Opened by BlackExe at 2007-07-07 03:19
Ich empfehle die Verwendung von
![]() Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #!/usr/bin/perl use strict; use warnings; package Widget::Select; use Moose; use Data::Dumper; has 'tuple' => (is => 'rw'); # ID, Text, ... has 'name' => (is => 'rw'); has 'selection' => (is => 'rw'); sub set_tuple { my $self = shift; $self->{tuple} = [@_] if @_ % 2 == 0; } sub as_form { my $self = shift; my @l = @{$self->{tuple}}; # non destructive my $o = '<select name="' . $self->name . "\">\n"; while (my ($k, $v) = splice @l, 0, 2) { $o .= ($k == $self->selection) ? '<option selected value="'. $k .'">'. $v .'</option>'."\n" : '<option value="'. $k .'">'. $v .'</option>'."\n"; } $o .= '</select>' . "\n"; return $o; } 1; Diese wird dann im Code wie folgt verwendet: Code (perl): (dl
)
1 2 my $wdgt_people = Widget::Select->new(name => 'sel_people'); $wdgt_people->set_tuple( 1, 'Jack', 2, 'Joe' ); # easier using a database-query und im Template muss nur noch die Methode as_form aufgerufen werden. Mann kann es auch völlig ohne Template verwenden, z.B. via CGI: Code (perl): (dl
)
1 2 3 4 print $q->header, $q->start_html, $q->h1('foo'), $q->start_form, $wdgt->as_form, $q->hr, $q->submit(-name => "action", -value => "submit"), $q->end_form, $q->end_html; EDIT: Gerade gesehen, dass der Beispiel-Code schon etwas älter sind und einige Korrekturen, im Hinblick auf die OO-Kapselung, bei der Verwendung von ![]() <!--EDIT|Ronnie|1183796970--> |