Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]936[/thread]

CGI::Aplication mit html::template verknüpfen: CGI::Aplication und html::template



<< >> 8 Einträge, 1 Seite
Gast Gast
 2007-06-07 22:07
#143 #143
mein problem liegt in der verknüpfung von cgi::application und html::template.
mit hilfe von cgi::application kann ich den ablauf meines programm steuern. hier mein code:

sub setup {
my $self = shift;

$self->run_modes(
'mode1' => 'showform',
'mode2' => 'showlist',
'mode3' => 'showdetail'
);

$self->start_mode('mode1');
$self->mode_param('rm');
}


sub showform {
my $self = shift;
my $template = HTML::Template->new(filename =>
'D:/xxx/index_neu.htm' ) ;


return $template->output;

}

die funktion showform wird als erstes aufgerufen. hier binde ich mein template ein...
im template will ich eine navigationsleiste mit knöpfen.
JETZT endlich meine frage: wie muss ich die knöpfe programmieren, damit das programm erkennt, welche seite als nächstes aufgerufen wird (über mode_param rm)?
ist mein ansatz soweit korrekt, oder hat jemand einen besseren vorschlag...im vorraus: vielen dank für die hilfe
renee
 2007-06-07 23:19
#144 #144
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ja...

Du solltest die load_tmpl-Funktion von CPAN:CGI::Application verwenden...

Template:[html]<html><body>
<h2><TMPL_VAR NAME=SEITE></h2>
<a href="skript.cgi?rm=seite3">Seite 3</a><br />
<a href="skript.cgi?rm=seite4">Seite 4</a></body></html>[/html]

Skript:
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
#!/usr/bin/perl

use strict;
use warnings;
use base qw(CGI::Application);

sub setup{
    my ($self) = @_;

    $self->start_mode( 'seite1' );
    $self->mode_param( 'rm' );
    $self->run_modes(
        AUTOLOAD => \&seite1,
        seite1 => \&seite1,
        seite3 => \&seite3,
        seite4 => \&seite4,
    );
}

sub seite1{
    my ($self) = @_;

    my $tmpl = $self->load_tmpl( 'template.tmpl' );
    $tmpl->param( SEITE => 'Seite 1' );
    return $tmpl->output;
}

sub seite3{
    my ($self) = @_;
    my $tmpl = $self->load_tmpl( 'template.tmpl' );
    $tmpl->param( SEITE => 'Seite 1' );
    return $tmpl->output;
}

sub seite4{
    my ($self) = @_;

    my $tmpl = $self->load_tmpl( 'template.tmpl' );
    $tmpl->param( SEITE => 'Seite 4' );
    return $tmpl->output;
}
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/
MartinR
 2007-06-12 12:44
#145 #145
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=renee,07.06.2007, 21:19]Du solltest die load_tmpl-Funktion von CPAN:CGI::Application verwenden...[/quote]

Hi, warum *sollte* man das? Welche Vorteile bringt es? Ich verwende immer noch direct HTC z.B. so:

webapp.pl
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use strict;
use warnings;

use WebApp;
my $webapp = WebApp->new();
$webapp->run();


WebApp.pm
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package WebApp;

use base 'CGI::Application';
use strict;

use HTML::Template::Compiled;

use STARTMODUL;
use AMODUL;
use BMODUL;
use CMODUL;

# 1) cgiapp_init wird als erstes ausgeführt
sub cgiapp_init {

    my $self = shift;

    # HTC-Template Rahmenseite
    $self->{TEMPLATE} = HTML::Template::Compiled->new (
        filename => 'tmpl_rahmen.htm',
        path     => '/pfad/tmpl/',
        loop_context_vars => 1,
        );

}


# 2) setup wird als zweites ausgeführt
sub setup {

    my $self = shift;
    $self->start_mode('startseite');
    $self->mode_param('rm');
    $self->error_mode('startseite');
    $self->run_modes(
        'AUTOLOAD' => 'startseite',
        'a'        => 'sub_a',
        'b'        => 'sub_b',
        'c'        => 'sub_c',
        );
}


# 3) cgiapp_prerun wird als drittes ausgeführt
sub cgiapp_prerun {
    my $self = shift;
    # ...
}


# 4) cgiapp_postrun wird als viertes ausgeführt
sub cgiapp_postrun {

    my $self = shift;
    my $output_ref = shift;

    $self->{TEMPLATE}->param(
        RUNMODE => $self->get_current_runmode(),
        );

    $$output_ref = $self->{TEMPLATE}->output();

}

sub startseite {
    my $self = shift;
    $self->STARTMODUL::StartSeite();
}

sub sub_a {
    my $self = shift;
    $self->AMODUL::SeiteA();
}

sub sub_b {
    my $self = shift;
    $self->BMODUL::SeiteB();
}

sub sub_c {
    my $self = shift;
    $self->CMODUL::SeiteC();
}

1;


AMODUL.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package AMODUL;

use base 'CGI::Application';
use base 'WebApp';
use strict;

sub SeiteA {
    my $self = shift;
    $self->{TEMPLATE}->param(
        CONTENT_SEITE => 'tmpl_content_a.htm',
        INHALT => 'Scriptausgabe A',
        );
}

1;


BMODUL.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package BMODUL;

use base 'CGI::Application';
use base 'WebApp';
use strict;

sub SeiteB {
    my $self = shift;
    $self->{TEMPLATE}->param(
        CONTENT_SEITE => 'tmpl_content_b.htm',
        INHALT => 'Scriptausgabe B',
        );
}

1;


CMODUL.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package CMODUL;

use base 'CGI::Application';
use base 'WebApp';
use strict;

sub SeiteC {
    my $self = shift;
    $self->{TEMPLATE}->param(
        CONTENT_SEITE => 'tmpl_content_c.htm',
        INHALT => 'Scriptausgabe C',
        );
}

1;


STARTMODUL.pm
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package STARTMODUL;

use base 'CGI::Application';
use base 'WebApp';
use strict;

sub StartSeite {
    my $self = shift;
    $self->{TEMPLATE}->param(
        CONTENT_SEITE => 'tmpl_content_start.htm',
        INHALT        => 'Scriptausgabe A',
        );
}

1;


und in /tmpl/ dann tmpl_rahmen.htm
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
<html><head><title></title></head>

<body>

<table>
 <tr>
   <td>
            <p><a href="?rm=">Startseite</a></p>
        </td>
   <td>

<!-- TMPL_IF NAME="CONTENT_SEITE" -->
    <!-- TMPL_INCLUDE_VAR NAME="CONTENT_SEITE" -->
<!-- TMPL_ELSE -->
    <p>kein Content</p>
<!-- /TMPL_IF NAME="CONTENT_SEITE" -->

        </td>
 </tr>
</table>

</body>
</html>


tmpl_content_start.htm
Code: (dl )
1
2
3
4
5
<h1>Startseite</h1>
<p>Dies ist der Inhalt von tmpl_content_start.htm</p>
<p><a href="?rm=a">Test A</a></p>
<p><a href="?rm=b">Test B</a></p>
<p><a href="?rm=c">Test C</a></p>


tmpl_content_a.htm
Code: (dl )
1
2
3
4
5
<h1>A</h1>
<p>Dies ist der Inhalt von tmpl_content_a.htm</p>
<hr>
<p><!-- TMPL_VAR INHALT --></p>
<hr>


tmpl_content_b.htm
Code: (dl )
1
2
3
4
5
<h1>B</h1>
<p>Dies ist der Inhalt von tmpl_content_b.htm</p>
<hr>
<p><!-- TMPL_VAR INHALT --></p>
<hr>


tmpl_content_c.htm
Code: (dl )
1
2
3
4
5
<h1>C</h1>
<p>Dies ist der Inhalt von tmpl_content_c.htm</p>
<hr>
<p><!-- TMPL_VAR INHALT --></p>
<hr>
renee
 2007-06-12 12:59
#146 #146
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
*sollte* ist vielleicht der falsche Ausdruck, ich nutze ganz gern die Funktionen, die ein Modul mir schon zur Verfügung stellt... Aber das war ja auch nicht die Kernaussage meines Postings. Es ging ja eigentlich darum, wie man bestimmte Subroutinen ausführen kann.
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/
MartinR
 2007-06-12 13:19
#147 #147
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
... schon klar. Aber gibt es trotzdem erkennbare Vor- bzw. Nachteile für die Eine oder Andere Lösung?
renee
 2007-06-12 13:23
#148 #148
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, das load_tmpl ist nur kürzer und man muss kein use HTML::Template machen. Ansonsten macht es nichts anderes als ein HTML::Template->new(...)
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-06-12 13:26
#149 #149
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Naja, die load_tmpl-Version hat noch den Vorteil, dass CPAN:CGI::Application etwas "Magie" hinzufügt: Man kann ein Skalarref, Filename oder sowas übergeben und man muss nicht selbst irgendwelche Parameter anpassen.
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/
pktm
 2007-06-12 22:37
#150 #150
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Mal abgesehen davon, dass diverse Plugins die Möglichkeit bieten, einfach ein anderes Template-Modul hinter load_tmpl() arbeiten zu lassen. Dann musst du deinen Code nicht so stark ändern wenn du mal von HTML::Template auf HTC oder TT oder sowas in der Art umsteigst.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
<< >> 8 Einträge, 1 Seite



View all threads created 2007-06-07 22:07.