Thread CGI::Aplication mit html::template verknüpfen: CGI::Aplication und html::template (7 answers)
Opened by Gast at 2007-06-07 22:07

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>

View full thread CGI::Aplication mit html::template verknüpfen: CGI::Aplication und html::template