Mercurial > pub > Impl
comparison Lib/Engine/Output/Template.pm @ 0:03e58a454b20
Создан репозитарий
author | Sergey |
---|---|
date | Tue, 14 Jul 2009 12:54:37 +0400 |
parents | |
children | 16ada169ca75 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:03e58a454b20 |
---|---|
1 package Engine; | |
2 our $Encoding; | |
3 | |
4 package Engine::Output::Template; | |
5 use strict; | |
6 use Common; | |
7 use Template; | |
8 our @ISA = qw(Object); | |
9 our %Formats; | |
10 | |
11 BEGIN { | |
12 DeclareProperty Include => ACCESS_READ; | |
13 DeclareProperty ContentType => ACCESS_READ; | |
14 DeclareProperty Encoding => ACCESS_READ; | |
15 } | |
16 | |
17 sub CTOR { | |
18 my ($this,%args) = @_; | |
19 | |
20 $this->{$Include} = $args{Include} or die new Exception('An include diretory is required',$args{Format}); | |
21 $this->{$ContentType} = $args{ContentType} or die new Exception('A content type must be specied',$args{Format}); | |
22 $this->{$Encoding} = $args{Encoding}; | |
23 } | |
24 | |
25 sub Print { | |
26 my ($this,$Query,$Action) = @_; | |
27 | |
28 my $template = new Template( | |
29 { | |
30 INCLUDE_PATH => $this->{$Include}, | |
31 INTERPOLATE => 1, | |
32 RECURSION => 1, | |
33 ENCODING => $this->{$Encoding} | |
34 } | |
35 ); | |
36 | |
37 my @path = $Action->RequestURI->path_segments; | |
38 shift @path; | |
39 my $Template; | |
40 eval { | |
41 $Template = $template->context->template(join('/',@path)); | |
42 }; | |
43 print $Query->header(-type => 'text/html') and die new Exception('Failed to process a template', $@) if $@; | |
44 $Query->Expires($Template->Expires); | |
45 print $Query->header(-type => $this->{$ContentType}); | |
46 print $template->context->process($Template,{Encoding => $Engine::Encoding, Data => $Action->Result, Query => $Query }); | |
47 } | |
48 | |
49 sub construct { | |
50 my ($class,$format) = @_; | |
51 | |
52 $class->new(%{$Formats{$format}},Format => $format); | |
53 } | |
54 | |
55 1; |