Schrift
[thread]957[/thread]

Select Liste ...: HTML::Template

Leser: 3


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
BlackExe
 2007-07-07 03:19
#286 #286
User since
2007-03-25
49 Artikel
BenutzerIn
[default_avatar]
Hallo Leute ... :)


Mal wieder eine Frage?
Ich habe mir ein Script Programmiert, welches .dat Daten aus einen Pfad auflistet und in eine "Html Select Liste" einliest.
Per Button Klick wird dann ein ausgewählter Name in ein neues Textfeld geladen.
So das funktioniert alles wunderbar ...
Jetzt wollte ich das ganze in ein "HTML::Template" ausgeben aber das schaffe ich nicht.

Ich Sende mal den Source Code der Beispiel Datei:
Code: (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
#!C:\perl\bin\perl.exe
##!/usr/bin/perl -w
use strict;
use warnings;
use CGI qw(param);
use CGI::Carp qw(fatalsToBrowser);
$CGI::DISABLE_UPLOADS = 1;
print "Content-type: text/html\n\n";

my $auswahl = param('dateien');
my $dateiname;

print <<END;
<html><head>
<title>Test</title>
</head><body>
END

my $dir = "C:/xampp/cgi-bin";
print "<form action=\"\" method=\"post\">";
print "<select name=\"dateien\">";
opendir(DIR, "$dir") or die("Fehler beim Öffnen: $!");
while ( defined($dateiname = readdir(DIR)) ) {
next if ($dateiname !~ m/\.dat$/);
print '<option>'.$dateiname.'</option>', "<br>\n";
}
closedir(DIR) or die("Fehler beim Schließen: $!");

print <<END;
</select>
<input type="submit" value="Senden"> <br/>
<input tpye="text" name="data" value="$auswahl">
</form></body></html>
END


Code: (dl )
print '<option>'.$dateiname.'</option>', "<br>\n";

Und diese Daten wollte ich in das "HTML::Template" übergeben aber ich schaffe es nicht, das Ergebnis in eine Variable zuspeichern.

Code: (dl )
1
2
3
<select name="ergebnis">
<!-- TMPL_VAR NAME=ergebnis -->
</select>

Für die übergabe hatte ich mir das so gedacht?


Vieleicht hat ja einer einen Tipp, wie ich die Pfad Daten speichern und an die richtige stelle im Template übergeben kann?



Gruß Steve ... :)
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
bloonix
 2007-07-07 05:11
#287 #287
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Code: (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
36
37
38
use strict;
use warnings;
use Template;
use CGI qw(param);
use CGI::Carp qw(fatalsToBrowser);
$CGI::DISABLE_UPLOADS = 1;

my $auswahl = param('dateien');
my $dateiname;

my $dir = "C:/xampp/cgi-bin";
opendir(DIR, "$dir") or die("Fehler beim Öffnen: $!");
my @dateien = grep /\.dat$/, readdir(DIR);
closedir(DIR) or die("Fehler beim Schließen: $!");

print "Content-type: text/html\n\n";
my $t = Template->new();
$t->process(\*DATA, { dateien => \@dateien, auswahl => $auswahl });

__END__
<html>
<head>
  <title>Test</title>
</head>
<body>
<form action="" method="post">
<select name="dateien">
  [% FOREACH name = dateien %]
  <option value="[% name %]">[% name %]</option>
  [% END %]
</select>
<input type="submit" value="Senden">
[% IF auswahl %]
<input type="text" name="data" value="[% auswahl %]">
[% END %]
</form>
</body>
</html>


Ich weiß zwar nicht warum du in deinem Beispiel <input> benötigst um
den Dateinamen anzuzeigen, aber du wirst es schon wissen. ;)

Und wenn du dir was gutes tun möchtest, dann versuche nicht
HTML::Template zu verwenden. Irgendwann wirst du merken, das das
bauen von AoH (Array of Hashes) ziemlich umständlich werden kann.\n\n

<!--EDIT|opi|1183770788-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Ronnie
 2007-07-07 12:26
#288 #288
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich empfehle die Verwendung von CPAN:HTML::Template::Compiled, sowie einer kleinen Helper Klasse:
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 CPAN:Moose sinnvoll wären.\n\n

<!--EDIT|Ronnie|1183796970-->
BlackExe
 2007-07-07 17:44
#289 #289
User since
2007-03-25
49 Artikel
BenutzerIn
[default_avatar]
Hallo Leute ... :)


@opi, @Ronnie ...

Jetzt habt Ihr Euch schon wieder soviel mühe gegeben um mir zuhelfen und ich kann damit nix anfangen, weil ich es mal wieder nicht hinbekomme. :(
Ich weiss nicht wie ich mit "use Template;" umzugehen habe, ich kenne nur das "HTML::Template".

Quote
Ich weiß zwar nicht warum du in deinem Beispiel <input> benötigst um den Dateinamen anzuzeigen, aber du wirst es schon wissen

Ohne <input> bekomme ich das nicht hin.

Quote
HTML::Template::Compiled

Muss ich mir erstmal genau ansehen.

Quote
Und wenn du dir was gutes tun möchtest, dann versuche nicht HTML::Template zu verwenden.

Mache ich jetzt auch.

Ich Danke Euch für die Mühe und für die Tipps,
werde jetzt mal versuchen ohne das HTML::Template zuarbeiten.


Gruß Steve :)
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
renee
 2007-07-07 18:15
#290 #290
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=BlackExe,07.07.2007, 15:44]Jetzt habt Ihr Euch schon wieder soviel mühe gegeben um mir zuhelfen und ich kann damit nix anfangen, weil ich es mal wieder nicht hinbekomme. :(
Ich weiss nicht wie ich mit "use Template;" umzugehen habe, ich kenne nur das "HTML::Template".

Quote
Ich weiß zwar nicht warum du in deinem Beispiel <input> benötigst um den Dateinamen anzuzeigen, aber du wirst es schon wissen

Ohne <input> bekomme ich das nicht hin.

[/quote]Wenn es nur um's anzeigen geht... Mach aus:
Code: (dl )
1
2
3
4
5
6
print <<END;
</select>
<input type="submit" value="Senden"> <br/>
<input tpye="text" name="data" value="$auswahl">
</form></body></html>
END


einfach
Code: (dl )
1
2
3
4
5
6
7
print <<END;
</select>
<input type="submit" value="Senden"> <br/>
$auswahl
<input type="hidden" value="$auswahl">
</form></body></html>
END

Quote
Quote
HTML::Template::Compiled

Muss ich mir erstmal genau ansehen.

Ist nahezu 100% feature-kompatibel mit HTML::Template. Du brauchst eigentlich nichts umzustellen (außer beim use und bei der Objekterzeugung).

Quote
Und wenn du dir was gutes tun möchtest, dann versuche nicht HTML::Template zu verwenden.
[/quote]
@opi: Warum??\n\n

<!--EDIT|renee|1183817736-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2007-07-07 18:25
#291 #291
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So würde es mit CPAN:HTML::Template::Compiled gehen:
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
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl

use strict;
use warnings;
use HTML::Template::Compiled;

use CGI qw(param);
use CGI::Carp qw(fatalsToBrowser);

$CGI::DISABLE_UPLOADS = 1;

my $auswahl = param('dateien');
my $dateiname;

my $dir = ".";
opendir(DIR, "$dir") or die("Fehler beim Öffnen: $!");
my @dateien = grep /\.dat$/, readdir(DIR);
closedir(DIR) or die("Fehler beim Schließen: $!");

print CGI::header();
my $t = HTML::Template::Compiled->new( filehandle => *DATA);
$t->param(dateien => \@dateien, auswahl => $auswahl);
print $t->output;


__DATA__
<html>
<head>
  <title>Test</title>
</head>
<body>
<form action="" method="post">
<select name="dateien">
  <TMPL_LOOP NAME=dateien>
  <option value="<TMPL_VAR _ >"><TMPL_VAR _ ></option>
  </TMPL_LOOP>
</select>
<input type="submit" value="Senden">
<TMPL_IF auswahl>
<input type="text" name="data" value="<TMPL_VAR auswahl>">
</TMPL_IF>
</form>
</body>
</html>
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
BlackExe
 2007-07-07 19:19
#292 #292
User since
2007-03-25
49 Artikel
BenutzerIn
[default_avatar]
Hallo renee ... :)

Danke Dir, für Deine Mühe, mir das verständlich zumachen.
Jetzt habe ich es verstanden und es funktioniert. :)

Ich habe in den Wochen so einige methoden gelernt, was das ausgeben von "html" mit "Perl" angeht. Aber das mit dem
Template gefällt mir noch am besten.

Das ist aber auch kompliziert aber es macht spaß ... :)
Danke nochmal an alle ... :)


Gruß Steve ... :)
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
pq
 2007-07-07 22:09
#293 #293
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also HTC hat gegenüber HTML::Template das IMHO wichtige feature,
dass man mit der punkt-notation auf beliebige elemente im parameterbaum
zugreifen kann. so muss man nicht umständlich arrays of hashes of arrays of ...
aufbauen. und man kann auch jederzeit auf die wurzel des baums zugreifen,
was einem global_vars erspart.
natürlich kann Template-Toolkit noch mehr, jedoch finde ich die syntax
nicht ganz so doll (z.b. wird jedes element wie IF oder LOOP mit END
geschlossen, so dass man nicht mehr unbedingt sieht, welches END
jetzt was schliesst), und es ist eine eigene sprache, wogegen
H::T(::C) noch mehr formatierungssprache als programmiersprache
ist, dadurch, dass es eine ganz fixe syntax gibt (tagname key=value).
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
BlackExe
 2007-07-07 22:52
#294 #294
User since
2007-03-25
49 Artikel
BenutzerIn
[default_avatar]
Hallo pq ... :)

Das "HTC" hört sich auch Interessant an.
Das kannte ich noch nicht, werde ich mir aber auch mal ansehen.
Ich sehe schon, die möglichkeiten sind gegeben. :)

Danke Dir pq, für die Information.


Gruß Steve ... :)
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
renee
 2007-07-08 00:50
#295 #295
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
HTC ist CPAN:HTML::Template::Compiled...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-07-07 03:19.