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; |
