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
|
sub load_tmpl {
my $app = shift;
my($file, @p) = @_;
my $cfg = $app->config;
require HTML::Template;
my $tmpl;
my $err;
my @paths = $app->template_paths;
my $cache_dir;
if (!$app->config('NoLocking')) {
my $path = $cfg->TemplatePath;
$cache_dir = File::Spec->catdir($path, 'cache');
undef $cache_dir if (!-d $cache_dir) || (!-w $cache_dir);
}
my $type = {'SCALAR' => 'scalarref', 'ARRAY' => 'arrayref'}->{ref $file}
|| 'filename';
eval {
$tmpl = HTML::Template->new(
type => $type, source => $file,
path => \@paths,
search_path_on_include => 1,
die_on_bad_params => 0, global_vars => 1,
loop_context_vars => 1,
$cache_dir ? (file_cache_dir => $cache_dir, file_cache => 1,
file_cache_dir_mode => 0777) : (),
filter => sub {
my $fname = $HTML::Template::this_file;
if ($fname) {
$fname = File::Basename::basename($fname);
$fname =~ s/\.tmpl$//;
$app->run_callbacks(ref($app) . "::AppTemplateSource.$fname", $app, $_[0]);
} else {
$app->run_callbacks(ref($app)."::AppTemplateSource", $app, $_[0]);
}
$_[0];
},
@p);
};
$err = $@;
return $app->error(
$app->translate("Loading template '[_1]' failed: [_2]", $file, $err))
if $err;
$app->set_default_tmpl_params($tmpl);
$tmpl;
}
|