Changeset 27062 for lang/perl/MENTOS/trunk/lib/MENTA/TemplateLoader.pm
- Timestamp:
- 12/19/08 16:01:48 (4 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/MENTOS/trunk/lib/MENTA/TemplateLoader.pm
r26396 r27062 8 8 sub __load { 9 9 my ($path, @params) = @_; 10 my $out; 10 11 11 if (__use_cache($path)) { 12 12 my $tmplfname = MENTA::mt_cache_dir . "/$path.c"; … … 15 15 die $@ if $@; 16 16 die "テンプレートキャッシュを読み込めませんでした: ${tmplfname}($!)" unless $tmplcode; 17 $out = $tmplcode->(@params);17 return $tmplcode->(@params)->as_string; 18 18 } else { 19 my $code = __compile($path); 20 local $@; 21 my $tmplcode = eval $code; 22 die $@ if $@; 23 $out = $tmplcode->(@params); 24 __update_cache($path, $code); 19 return __compile($path, @params); 25 20 } 26 $out;27 21 } 28 22 29 23 sub __compile { 30 my ($path) = @_; 31 MENTA::Util::require_once('MENTA/Template.pm'); 32 my $tmplfname = MENTA::controller_dir() . "/$path"; 33 my $src = do { 34 open my $fh, '<:utf8', $tmplfname or die "${tmplfname} を読み込み用に開けません: $!"; 35 my $s = do { local $/; join '', <$fh> }; 36 close $fh; 37 $s; 38 }; 39 my $t = MENTA::Template->new; 40 $t->parse($src); 41 $t->build(); 42 my $code = $t->code(); 43 $code = << "EOT"; 44 package MENTA::TemplateLoader::Instance; 45 use strict; 46 use warnings; 47 use utf8; 48 $code 49 EOT 50 ; 51 $code; 24 my ($path, @params) = @_; 25 MENTA::Util::require_once('Text/MicroTemplate/File.pm'); 26 27 my $mtf = Text::MicroTemplate::File->new( 28 include_path => [MENTA::controller_dir()], 29 package_name => 'MENTA::TemplateLoader::Instance', 30 ); 31 my $out = $mtf->build_file($path)->(@params)->as_string; 32 __update_cache($path, $mtf->code); 33 return $out; 52 34 } 53 35 54 36 sub __update_cache { 55 37 my ($path, $code) = @_; 38 39 $code = <<"..."; 40 package MENTA::TemplateLoader::Instance; 41 sub { 42 local \$SIG{__WARN__} = sub { print STDERR \$_mt->_error(shift, 4, \$_from) }; 43 Text::MicroTemplate::encoded_string(( 44 $code 45 )->(\@_)); 46 } 47 ... 48 56 49 my $cache_path = MENTA::mt_cache_dir; 57 50 foreach my $p (split '/', $path) {
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)